{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "SMAI_DL_q2.ipynb",
      "provenance": [],
      "collapsed_sections": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "a21eqcaU4_-y"
      },
      "source": [
        "# Importing the required Libraries"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YOLNk7wH-cYt"
      },
      "source": [
        "# Helper Libraries\n",
        "\n",
        "import numpy as np\n",
        "import pandas as pd\n",
        "import matplotlib.pyplot as plt\n",
        "import seaborn as sns"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3Jxf1j0zw2an",
        "outputId": "f07e54a6-202f-406b-91ed-0da4b7a8d907"
      },
      "source": [
        "# TensorFlow and tf.keras\n",
        "\n",
        "import tensorflow as tf\n",
        "from tensorflow import keras\n",
        "\n",
        "print(tf.__version__)\n",
        "\n",
        "print(keras.__version__)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "2.4.1\n",
            "2.4.0\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "sCSswlisxCFG"
      },
      "source": [
        "from keras.utils import np_utils\n",
        "from keras.models import Sequential \n",
        "from keras.layers import Dense, Dropout, BatchNormalization\n",
        "from keras.layers import Flatten\n",
        "from keras.models import Model"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "OuX2ungqyYNQ"
      },
      "source": [
        "from keras.datasets import mnist"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "r98zU1xscddp"
      },
      "source": [
        "from keras.optimizers import RMSprop\n",
        "from keras.optimizers import Adam\n",
        "from keras.optimizers import SGD\n",
        "from keras.optimizers import Adagrad"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Y5wPEufuyciq"
      },
      "source": [
        "# Load the Data"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9YbtcHvTyZqB"
      },
      "source": [
        "(X_train, y_train), (X_test, y_test) = mnist.load_data()"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "B4Y_C04Aybrp",
        "outputId": "2838d9c6-cd1d-4346-86c1-5d79bece6e02"
      },
      "source": [
        "# As a sanity check, we print out the size of the training and test data.\n",
        "print('Training data shape: ', X_train.shape)\n",
        "print('Training labels shape: ', y_train.shape)\n",
        "print('Test data shape: ', X_test.shape)\n",
        "print('Test labels shape: ', y_test.shape)"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Training data shape:  (60000, 28, 28)\n",
            "Training labels shape:  (60000,)\n",
            "Test data shape:  (10000, 28, 28)\n",
            "Test labels shape:  (10000,)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 716
        },
        "id": "flJTUtUyyof2",
        "outputId": "5d8a1cd6-bb09-4c9b-b6b2-3ff892bb2423"
      },
      "source": [
        "plt.figure(figsize=(12, 12))\n",
        "np.random.seed(0)\n",
        "idx = np.random.randint(0, 60000, 9)\n",
        "\n",
        "for i in range(len(idx)):\n",
        "    plt.subplot(3, 3, i+1)\n",
        "    plt.title(y_train[idx[i]])\n",
        "    grid_data = np.reshape(X_train[idx[i]], (28,28))\n",
        "    plt.imshow(grid_data, cmap='gray')"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 864x864 with 9 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "SQfnpIMDyvAb"
      },
      "source": [
        "# Data Preprocessing"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "AFxGy5r8yrWl"
      },
      "source": [
        "# Type Conversion of Columns\n",
        "X_train = X_train.astype('float32')\n",
        "X_test = X_test.astype('float32')\n",
        "\n",
        "# Normalization\n",
        "X_train = X_train/255\n",
        "X_test = X_test/255\n",
        "\n",
        "# Adding the channel\n",
        "X_train = X_train.reshape(60000, 28, 28, 1)\n",
        "X_test = X_test.reshape(10000, 28, 28, 1)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TkGts2SB4YMB"
      },
      "source": [
        "# # here we are having a class number for each image\n",
        "# print(\"Class label of first image :\", y_train[0])\n",
        "\n",
        "# # lets convert this into a 10 dimensional vector\n",
        "# # ex: consider an image is 5 convert it into 5 => [0, 0, 0, 0, 0, 1, 0, 0, 0, 0]\n",
        "# # this conversion needed for MLPs \n",
        "\n",
        "# Y_train = np_utils.to_categorical(y_train, 10) \n",
        "# Y_test = np_utils.to_categorical(y_test, 10)\n",
        "\n",
        "# print(\"After converting the output into a vector : \",Y_train[0])"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "XDzw9-bv4cry"
      },
      "source": [
        "from sklearn.model_selection import train_test_split\n",
        "train_X, valid_X, train_ground, valid_ground = train_test_split(X_train,\n",
        "                                                                X_train, \n",
        "                                                                test_size=0.2, \n",
        "                                                                random_state=13)"
      ],
      "execution_count": null,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Qsb6I9Jia_2B"
      },
      "source": [
        "# Building the model - Experiment_SGD(without momentum)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2XKEA7PNa_VX",
        "outputId": "5f443cdb-68c9-40eb-f46b-77949ebe8700"
      },
      "source": [
        "#Encoder\n",
        "encoder_input = keras.Input(shape=(28, 28, 1), name='img')\n",
        "x = keras.layers.Flatten()(encoder_input)\n",
        "encoder_output = keras.layers.Dense(64, activation=\"relu\")(x)\n",
        "\n",
        "encoder = keras.Model(encoder_input, encoder_output, name='encoder')\n",
        "\n",
        "#decoder\n",
        "decoder_input = keras.layers.Dense(64, activation=\"relu\")(encoder_output)\n",
        "x = keras.layers.Dense(784, activation=\"relu\")(decoder_input)\n",
        "decoder_output = keras.layers.Reshape((28, 28, 1))(x)\n",
        "\n",
        "#autoencoder\n",
        "autoencoder = keras.Model(encoder_input, decoder_output, name='autoencoder')\n",
        "\n",
        "autoencoder.summary()\n",
        "\n",
        "#compile the model\n",
        "autoencoder.compile(loss='mean_squared_error', optimizer = SGD())\n",
        "\n",
        "#fit the model\n",
        "autoencoder_train = autoencoder.fit(train_X, train_ground, batch_size=128, epochs=50, validation_data=(valid_X, valid_ground))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"autoencoder\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "img (InputLayer)             [(None, 28, 28, 1)]       0         \n",
            "_________________________________________________________________\n",
            "flatten (Flatten)            (None, 784)               0         \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 64)                50240     \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 64)                4160      \n",
            "_________________________________________________________________\n",
            "dense_2 (Dense)              (None, 784)               50960     \n",
            "_________________________________________________________________\n",
            "reshape (Reshape)            (None, 28, 28, 1)         0         \n",
            "=================================================================\n",
            "Total params: 105,360\n",
            "Trainable params: 105,360\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n",
            "Epoch 1/50\n",
            "375/375 [==============================] - 2s 4ms/step - loss: 0.1054 - val_loss: 0.1048\n",
            "Epoch 2/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.1040 - val_loss: 0.1031\n",
            "Epoch 3/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.1024 - val_loss: 0.1011\n",
            "Epoch 4/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.1000 - val_loss: 0.0988\n",
            "Epoch 5/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0981 - val_loss: 0.0963\n",
            "Epoch 6/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0954 - val_loss: 0.0937\n",
            "Epoch 7/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0927 - val_loss: 0.0910\n",
            "Epoch 8/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0903 - val_loss: 0.0884\n",
            "Epoch 9/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0878 - val_loss: 0.0861\n",
            "Epoch 10/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0852 - val_loss: 0.0841\n",
            "Epoch 11/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0835 - val_loss: 0.0824\n",
            "Epoch 12/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0818 - val_loss: 0.0810\n",
            "Epoch 13/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0805 - val_loss: 0.0799\n",
            "Epoch 14/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0795 - val_loss: 0.0791\n",
            "Epoch 15/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0788 - val_loss: 0.0784\n",
            "Epoch 16/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0780 - val_loss: 0.0778\n",
            "Epoch 17/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0773 - val_loss: 0.0774\n",
            "Epoch 18/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0773 - val_loss: 0.0770\n",
            "Epoch 19/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0766 - val_loss: 0.0767\n",
            "Epoch 20/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0762 - val_loss: 0.0764\n",
            "Epoch 21/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0762 - val_loss: 0.0762\n",
            "Epoch 22/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0760 - val_loss: 0.0760\n",
            "Epoch 23/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0757 - val_loss: 0.0758\n",
            "Epoch 24/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0758 - val_loss: 0.0757\n",
            "Epoch 25/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0755 - val_loss: 0.0755\n",
            "Epoch 26/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0755 - val_loss: 0.0754\n",
            "Epoch 27/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0752 - val_loss: 0.0752\n",
            "Epoch 28/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0750 - val_loss: 0.0751\n",
            "Epoch 29/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0749 - val_loss: 0.0750\n",
            "Epoch 30/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0749 - val_loss: 0.0749\n",
            "Epoch 31/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0747 - val_loss: 0.0748\n",
            "Epoch 32/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0744 - val_loss: 0.0746\n",
            "Epoch 33/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0745 - val_loss: 0.0744\n",
            "Epoch 34/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0743 - val_loss: 0.0742\n",
            "Epoch 35/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0741 - val_loss: 0.0741\n",
            "Epoch 36/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0740 - val_loss: 0.0739\n",
            "Epoch 37/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0737 - val_loss: 0.0738\n",
            "Epoch 38/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0738 - val_loss: 0.0737\n",
            "Epoch 39/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0734 - val_loss: 0.0736\n",
            "Epoch 40/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0734 - val_loss: 0.0735\n",
            "Epoch 41/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0734 - val_loss: 0.0734\n",
            "Epoch 42/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0732 - val_loss: 0.0733\n",
            "Epoch 43/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0731 - val_loss: 0.0732\n",
            "Epoch 44/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0733 - val_loss: 0.0731\n",
            "Epoch 45/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0730 - val_loss: 0.0731\n",
            "Epoch 46/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0728 - val_loss: 0.0730\n",
            "Epoch 47/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0728 - val_loss: 0.0729\n",
            "Epoch 48/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0729 - val_loss: 0.0728\n",
            "Epoch 49/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0727 - val_loss: 0.0726\n",
            "Epoch 50/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0725 - val_loss: 0.0725\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "id": "HZkt1Toaa_nY",
        "outputId": "4f1b5acf-4d5f-4c75-839e-91e565a44c44"
      },
      "source": [
        "loss = autoencoder_train.history['loss']\n",
        "val_loss = autoencoder_train.history['val_loss']\n",
        "epochs = range(50)\n",
        "plt.figure()\n",
        "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
        "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
        "plt.title('Training and validation loss')\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAYAAAAEICAYAAABWJCMKAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3deXxU1f3/8deHEBICiBDAKiDgV9SiYJAAKoqo1YJSaC0uNAoUBaSu4FKsbeEHpa1faV2+4oIooMWCy7cWqxarSN0tweKC4le0oFBURNnKDp/fH/cGhmEmmSSTTGbm/Xw85pF7z13m3BDu555z7jnH3B0REck+9VKdARERSQ0FABGRLKUAICKSpRQARESylAKAiEiWUgAQEclSCgCSNGb2rJkNTfa+qWRmK8zsOzVwXjezI8Ple83sF4nsW4XvKTGz56qaz3LO28fMViX7vFK76qc6A5JaZrY5YrUA2A7sDtdHufvsRM/l7v1qYt9M5+6XJ+M8ZtYe+BeQ6+67wnPPBhL+N5TsogCQ5dy9cdmyma0ALnP356P3M7P6ZTcVEckMqgKSmMqK+Gb2UzP7HJhhZs3M7C9mttbMvgmX20Qcs9DMLguXh5nZK2Y2Jdz3X2bWr4r7djCzl8xsk5k9b2ZTzewPcfKdSB4nmdmr4fmeM7MWEdsvMbOVZrbOzG4u5/fT08w+N7OciLQfmNk74XIPM3vdzNab2Rozu8vMGsQ510wz+1XE+g3hMf82s+FR+55rZv80s41m9pmZTYjY/FL4c72ZbTazk8p+txHHn2xmi8xsQ/jz5ER/N+Uxs2+Hx683s6VmNiBi2zlm9n54ztVmdn2Y3iL891lvZl+b2ctmpntSLdIvW8rzLaA50A4YSfD3MiNcPxzYCtxVzvE9gQ+BFsB/Aw+YmVVh30eAfwCFwATgknK+M5E8/gj4MdAKaACU3ZA6AfeE5z8s/L42xODubwL/Ac6IOu8j4fJuYEx4PScBZwI/KSffhHnoG+bnLKAjEN3+8B9gCHAwcC4w2sy+H27rHf482N0bu/vrUeduDjwN3Ble2++Bp82sMOoaDvjdVJDnXOAp4LnwuKuA2WZ2dLjLAwTViU2A44AFYfp1wCqgJXAI8DNAY9PUIgUAKc8eYLy7b3f3re6+zt2fcPct7r4JmAycVs7xK939fnffDcwCDiX4j57wvmZ2ONAd+KW773D3V4B58b4wwTzOcPf/c/etwKNAUZg+CPiLu7/k7tuBX4S/g3j+CAwGMLMmwDlhGu6+2N3fcPdd7r4CuC9GPmK5IMzfe+7+H4KAF3l9C939XXff4+7vhN+XyHkhCBgfufvDYb7+CCwDvhexT7zfTXlOBBoDvw3/jRYAfyH83QA7gU5mdpC7f+Pub0WkHwq0c/ed7v6ya3CyWqUAIOVZ6+7bylbMrMDM7gurSDYSVDkcHFkNEuXzsgV33xIuNq7kvocBX0ekAXwWL8MJ5vHziOUtEXk6LPLc4Q14XbzvInjaP8/M8oDzgLfcfWWYj6PC6o3Pw3z8mqA0UJH98gCsjLq+nmb2YljFtQG4PMHzlp17ZVTaSqB1xHq8302FeXb3yGAZed4fEgTHlWb2dzM7KUy/FVgOPGdmn5jZuMQuQ5JFAUDKE/00dh1wNNDT3Q9iX5VDvGqdZFgDNDezgoi0tuXsX508rok8d/idhfF2dvf3CW50/di/+geCqqRlQMcwHz+rSh4IqrEiPUJQAmrr7k2BeyPOW9HT878JqsYiHQ6sTiBfFZ23bVT9/d7zuvsidx9IUD30JEHJAnff5O7XufsRwABgrJmdWc28SCUoAEhlNCGoU18f1iePr+kvDJ+oS4EJZtYgfHr8XjmHVCePjwP9zeyUsMF2IhX/H3kEuIYg0DwWlY+NwGYzOwYYnWAeHgWGmVmnMABF578JQYlom5n1IAg8ZdYSVFkdEefczwBHmdmPzKy+mV0IdCKorqmONwlKCzeaWa6Z9SH4N5oT/puVmFlTd99J8DvZA2Bm/c3syLCtZwNBu0l5VW6SZAoAUhm3Aw2Br4A3gL/W0veWEDSkrgN+Bcwl6K8QS5Xz6O5LgSsIbuprgG8IGinLU1YHv8Ddv4pIv57g5rwJuD/McyJ5eDa8hgUE1SMLonb5CTDRzDYBvyR8mg6P3ULQ5vFq+GbNiVHnXgf0JyglrQNuBPpH5bvS3H0HwQ2/H8Hv/W5giLsvC3e5BFgRVoVdTvDvCUEj9/PAZuB14G53f7E6eZHKMbW5SLoxs7nAMnev8RKISCZTCUDqPDPrbmb/ZWb1wtckBxLUJYtINagnsKSDbwH/S9AguwoY7e7/TG2WRNKfqoBERLKUqoBERLJUWlUBtWjRwtu3b5/qbIiIpJXFixd/5e4to9PTKgC0b9+e0tLSVGdDRCStmFl0D3BAVUAiIllLAUBEJEspAIiIZKm0agMQkdq1c+dOVq1axbZt2yreWVIuPz+fNm3akJubm9D+CgAiEteqVato0qQJ7du3J/5cPlIXuDvr1q1j1apVdOjQIaFjMr4KaPZsaN8e6tULfs7W9NgiCdu2bRuFhYW6+acBM6OwsLBSpbWEAoCZ9TWzD81seaxJG8yst5m9ZWa7zGxQ1LahZvZR+Bkakb4wPOeS8NMq4VwnaPZsGDkSVq4E9+DnyJEKAiKVoZt/+qjsv1WFASCcSWkqwVCvnYDB4dypkT4FhrH/hBhlc5COJ5jvtQcw3syaRexS4u5F4efLSuU8ATffDFu27J+2ZUuQLiKS7RIpAfQAlrv7J+G433MIRmPcy91XhPOTRk/m8F3gb+7+tbt/A/wN6JuEfCfk008rly4idcu6desoKiqiqKiIb33rW7Ru3Xrv+o4dO8o9trS0lKuvvrrC7zj55JOTkteFCxfSv3//pJyrtiQSAFqz/xylq9h/DtHqHDsjrP75hcUpu5jZSDMrNbPStWvXJvi1gcOjJ9OrIF1EqifZbW6FhYUsWbKEJUuWcPnllzNmzJi96w0aNGDXrl1xjy0uLubOO++s8Dtee+216mUyjaWyEbjE3TsDp4afS2Lt5O7T3L3Y3YtbtjxgKItyTZ4MDRvun1ZQEKSLSHLVVpvbsGHDuPzyy+nZsyc33ngj//jHPzjppJPo2rUrJ598Mh9++CGw/xP5hAkTGD58OH369OGII47YLzA0btx47/59+vRh0KBBHHPMMZSUlFA2WvIzzzzDMcccQ7du3bj66qsrfNL/+uuv+f73v0+XLl048cQTeeeddwD4+9//vrcE07VrVzZt2sSaNWvo3bs3RUVFHHfccbz88svJ/YWVI5HXQFez/yTVbUh8EunVQJ+oYxcCuHvZhNGbzOwRgqqmhxI8b0JKwonnxoyBtWuhWTP4n//Zly4iyVNem1uy/8+tWrWK1157jZycHDZu3MjLL79M/fr1ef755/nZz37GE088ccAxy5Yt48UXX2TTpk0cffTRjB49+oD35f/5z3+ydOlSDjvsMHr16sWrr75KcXExo0aN4qWXXqJDhw4MHjy4wvyNHz+erl278uSTT7JgwQKGDBnCkiVLmDJlClOnTqVXr15s3ryZ/Px8pk2bxne/+11uvvlmdu/ezZboX2INSqQEsAjoaGYdwomyLwLmJXj++cDZZtYsbPw9G5gfTkjdAsDMcgnmKX2v8tmvWEkJfPEFnHMO7NwJp51WE98iIrXZ5nb++eeTk5MDwIYNGzj//PM57rjjGDNmDEuXLo15zLnnnkteXh4tWrSgVatWfPHFFwfs06NHD9q0aUO9evUoKipixYoVLFu2jCOOOGLvu/WJBIBXXnmFSy4JKjXOOOMM1q1bx8aNG+nVqxdjx47lzjvvZP369dSvX5/u3bszY8YMJkyYwLvvvkuTJk2q+muptAoDgLvvAq4kuJl/ADzq7kvNbKKZDYC9U/atAs4H7jOzpeGxXwOTCILIImBimJZHEAjeAZYQlBTuT/rVhcyCJ/9du2Ds2Jr6FpHsVpttbo0aNdq7/Itf/ILTTz+d9957j6eeeirue/B5eXl7l3NycmK2HySyT3WMGzeO6dOns3XrVnr16sWyZcvo3bs3L730Eq1bt2bYsGE89FBSK0LKlVAbgLs/4+5Huft/ufvkMO2X7j4vXF7k7m3cvZG7F7r7sRHHPujuR4afGWHaf9y9m7t3cfdj3f0ad99dExdY5ogjgqLoY4/B/PnqICaSbJMnB21skWqjzW3Dhg20bh28WzJz5sykn//oo4/mk08+YcWKFQDMnTu3wmNOPfVUZoc3lYULF9KiRQsOOuggPv74Yzp37sxPf/pTunfvzrJly1i5ciWHHHIII0aM4LLLLuOtt95K+jXEk/E9gSPdcAN07AhDh8KIEeogJpJMJSUwbRq0axeUutu1C9Zrus3txhtv5KabbqJr165Jf2IHaNiwIXfffTd9+/alW7duNGnShKZNm5Z7zIQJE1i8eDFdunRh3LhxzJo1C4Dbb7+d4447ji5dupCbm0u/fv1YuHAhxx9/PF27dmXu3Llcc801Sb+GeNJqTuDi4mKv7oQwzz8PZ50Ve1u7dhAGeREBPvjgA7797W+nOhspt3nzZho3boy7c8UVV9CxY0fGjBmT6mzFFOvfzMwWu3tx9L5ZVQIA+M534m9TBzERieX++++nqKiIY489lg0bNjBq1KhUZykpsnI00NatYXWMF1nVQUxEYhkzZkydfeKvjqwrAQDccgtED5etDmIikm2yMgCUlMD06fuCwOGH105jlYhIXZKVAQBgyBB49tlg+frrdfMXkeyTtQEA4Iwzgp7Bv/71gV3YRUQyXVYHADOYNAk+/xzuuSfVuRGRaKeffjrz58/fL+32229n9OjRcY/p06cPZa+Ln3POOaxfv/6AfSZMmMCUKVPK/e4nn3yS999/f+/6L3/5S55//vnKZD+mujRsdFYHAIBTTw36Bfz2t7B5c6pzIyKRBg8ezJw5c/ZLmzNnTkLj8UAwiufBBx9cpe+ODgATJ07kO+W9R56Gsj4AQFAK+OqrYLwgDREhUncMGjSIp59+eu/kLytWrODf//43p556KqNHj6a4uJhjjz2W8ePHxzy+ffv2fPXVVwBMnjyZo446ilNOOWXvkNEQvOPfvXt3jj/+eH74wx+yZcsWXnvtNebNm8cNN9xAUVERH3/8McOGDePxxx8H4IUXXqBr16507tyZ4cOHs3379r3fN378eE444QQ6d+7MsmXLyr2+VA8bnZX9AKL17Annnhu8BrpnD2zdGqSXDREBaiQWufZaWLIkuecsKoLbb4+/vXnz5vTo0YNnn32WgQMHMmfOHC644ALMjMmTJ9O8eXN2797NmWeeyTvvvEOXLl1inmfx4sXMmTOHJUuWsGvXLk444QS6desGwHnnnceIESMA+PnPf84DDzzAVVddxYABA+jfvz+DBu03zTnbtm1j2LBhvPDCCxx11FEMGTKEe+65h2uvvRaAFi1a8NZbb3H33XczZcoUpk+fHvf6Uj1stEoAoYkT4T//2XfzL6M5hEVSK7IaKLL659FHH+WEE06ga9euLF26dL/qmmgvv/wyP/jBDygoKOCggw5iwIABe7e99957nHrqqXTu3JnZs2fHHU66zIcffkiHDh046qijABg6dCgvvfTS3u3nnXceAN26dds7gFw8qR42WiWA0AknxN+mISJEyn9Sr0kDBw5kzJgxvPXWW2zZsoVu3brxr3/9iylTprBo0SKaNWvGsGHD4g4DXZFhw4bx5JNPcvzxxzNz5kwWLlxYrfyWDSldneGkx40bx7nnnsszzzxDr169mD9//t5ho59++mmGDRvG2LFjGTJkSLXyqhJAhEMPjZ2uISJEUqdx48acfvrpDB8+fO/T/8aNG2nUqBFNmzbliy++4NmyTj1x9O7dmyeffJKtW7eyadMmnnrqqb3bNm3axKGHHsrOnTv3DuEM0KRJEzZt2nTAuY4++mhWrFjB8uXLAXj44Yc5rYozTaV62GiVACLcemswVPTuiJkJNESESOoNHjyYH/zgB3urgsqGTz7mmGNo27YtvXr1Kvf4E044gQsvvJDjjz+eVq1a0b17973bJk2aRM+ePWnZsiU9e/bce9O/6KKLGDFiBHfeeefexl+A/Px8ZsyYwfnnn8+uXbvo3r07l19+eZWuq2yu4i5dulBQULDfsNEvvvgi9erV49hjj6Vfv37MmTOHW2+9ldzcXBo3bpyUiWOybjjoitx6K9x4Y7Dcrl1w81cDsGQrDQedfiozHLRKAFFuuAHefTeYOezNN+GQQ1KdIxGRmqE2gBhuvhm2bVPvYBHJbAoAMRx9NPTvD1OnHvhaqEi2Sadq4mxX2X8rBYA4rrsu6B388MOpzolI6uTn57Nu3ToFgTTg7qxbt478/PyEj0moEdjM+gJ3ADnAdHf/bdT23sDtQBfgInd/PGLbUODn4eqv3H1WmN4NmAk0BJ4BrvEKMlMbjcBl3KFbt6AEsHRpMDSESLbZuXMnq1atqvI79lK78vPzadOmDblRM15VuRHYzHKAqcBZwCpgkZnNc/fIbnefAsOA66OObQ6MB4oBBxaHx34D3AOMAN4kCAB9gfJf5q1FZkEp4OKLg3kDzj031TkSqX25ubl06NAh1dmQGpLIc20PYLm7f+LuO4A5wMDIHdx9hbu/A+yJOva7wN/c/evwpv83oK+ZHQoc5O5vhE/9DwHfr+7FJNsFFwTzB//+98G6BooTkUySSABoDXwWsb4qTEtEvGNbh8tVOWetyc2Fq6+GBQuCSWNGjgwGiHPfN1CcgoCIpKs6X7NtZiPNrNTMSteuXVvr3z9yJDRuHHvWMA0UJyLpLJEAsBpoG7HeJkxLRLxjV4fLFZ7T3ae5e7G7F7ds2TLBr02egw+GSy8NRgqNRQPFiUi6SiQALAI6mlkHM2sAXATMS/D884GzzayZmTUDzgbmu/saYKOZnWhmBgwB/lyF/NeKa66Jv00DxYlIuqowALj7LuBKgpv5B8Cj7r7UzCaa2QAAM+tuZquA84H7zGxpeOzXwCSCILIImBimAfwEmA4sBz6mDr0BFK1DB+jR48B0DRQnIulMg8El6PXX4eSToVkzWL8+ePLXQHEikg40GFw1nXRS8PniC1i7FnJyUp0jEZHqqfNvAdUl110Hn3wC8xJtARERqcMUACph4EBo0wbuvTfVORERqT4FgEqoXx9GjIDnnoNwNjgRkbSlAFBJl10W1P/fd1+qcyIiUj0KAJV02GFBVdCMGcGkMSIi6UoBoApGj4Z16yBinmgRkbSjAFAFZ5wBHTtqykgRSW8KAFVQrx6MGgWvvQbvvKNhokUkPSkAVNGwYZCXB2PHaphoEUlPCgBVVFgIF14YzBWgYaJFJB0pAFTD6NHBU38sGiZaROo6BYBq6NkzmDUsFg0TLSJ1nQJANZgFk8ZH0zDRIpIOFACq6Y47ID8fGjUKAkK7djBtmoaJFpG6T8NBV1OTJvDjH8ODDwbDRBcWpjpHIiKJUQkgCUaPhu3bYdasVOdERCRxCgBJ0LkznHgiTJ8e/60gEZG6RgEgSS69FD74AN54I9U5ERFJjAJAklx4YdAQ/OCDqc6JiEhiFACSpEkTuOACmDMHNm9OdW5ERCqmAJBEl14a3PwfeyzVORERqVhCAcDM+prZh2a23MzGxdieZ2Zzw+1vmln7ML2Bmc0ws3fN7G0z6xNxzMLwnEvCT6skXVPKnHwyHH00PPBAqnMiIlKxCgOAmeUAU4F+QCdgsJl1itrtUuAbdz8SuA24JUwfAeDunYGzgN+ZWeR3lrh7Ufj5snqXknpmQSng1Vdh2TINEy0idVsiJYAewHJ3/8TddwBzgIFR+wwEyt6Cfxw408yMIGAsAAhv8OuB4mRkvK4aMiSYPP766zVMtIjUbYkEgNbAZxHrq8K0mPu4+y5gA1AIvA0MMLP6ZtYB6Aa0jThuRlj984swYBzAzEaaWamZla5duzahi0qlQw6B/v3h2Wc1TLSI1G013Qj8IEHAKAVuB14DdofbSsKqoVPDzyWxTuDu09y92N2LW7ZsWcPZTY7hw2HPntjbNEy0iNQViQSA1ez/1N4mTIu5j5nVB5oC69x9l7uPCev4BwIHA/8H4O6rw5+bgEcIqpoyQr9+kJMTe5uGiRaRuiKRALAI6GhmHcysAXARMC9qn3nA0HB5ELDA3d3MCsysEYCZnQXscvf3wyqhFmF6LtAfeC8J11Mn1K8P55xzYLqGiRaRuqTCABDW6V8JzAc+AB5196VmNtHMBoS7PQAUmtlyYCxQ9qpoK+AtM/sA+Cn7qnnygPlm9g6whKAEcX+SrqlO+N3vgp8HH6xhokWkbjJPo9HLiouLvbS0NNXZSNhpp8GaNfDhh0EQEBFJBTNb7O4HvIGpnsA16NJL4aOP4OWXU50TEZEDKQDUoEGD4KCD1DNYROomBYAaVFAAgwcHYwNt3Jjq3IiI7E8BoIYNHw5bt8Kjj6Y6JyIi+1MAqGHdu0OnTponQETqHgWAGmYWlAJefz2YMUxEpK5QAKgFF18c9AyeOTPVORER2UcBoBaUDRA3axbs3Jnq3IiIBBQAasnw4fDFF/DXv6Y6JyIiAQWAWtKvH7RqBTNmaKIYEakb6qc6A9kiNzeYLOa224JSwNatQXrZRDGgcYJEpHapBFCLfvxj2L17382/jCaKEZFUUACoRZ2iZ1KOoIliRKS2KQDUsubNY6drohgRqW0KALXst789ME0TxYhIKigA1LIRI6BXr33zA2iiGBFJFQWAFJg0CdyD1z9XrNDNX0RSQwEgBU47LXj/X/MEiEgqKQCkQL16Qc/gBQvg449TnRsRyVYKACkyfHgQCKZPT3VORCRbKQCkSOvWwQBxDz4IO3akOjciko0SCgBm1tfMPjSz5WY2Lsb2PDObG25/08zah+kNzGyGmb1rZm+bWZ+IY7qF6cvN7E6zsvdisseoUfDll/DnP6c6JyKSjSoMAGaWA0wF+gGdgMFmFt2n9VLgG3c/ErgNuCVMHwHg7p2Bs4DfmVnZd94Tbu8YfvpW71LSz3e/G3QAmzYt1TkRkWyUSAmgB7Dc3T9x9x3AHGBg1D4DgVnh8uPAmeETfSdgAYC7fwmsB4rN7FDgIHd/w90deAj4frWvJs3k5MBll8Hzz8Py5anOjYhkm0QCQGvgs4j1VWFazH3cfRewASgE3gYGmFl9M+sAdAPahvuvquCcAJjZSDMrNbPStWvXJpDd9DJ8eBAIpk/XMNEiUrtqejjoB4FvA6XASuA1YHdlTuDu04BpAMXFxZ7sDKZaWWPwPfcEs4VpmGgRqS2JlABWEzy1l2kTpsXcx8zqA02Bde6+y93HuHuRuw8EDgb+L9y/TQXnzBqjRsHGjRomWkRqVyIBYBHQ0cw6mFkD4CJgXtQ+84Ch4fIgYIG7u5kVmFkjADM7C9jl7u+7+xpgo5mdGLYVDAGy9l2Ys8+Ov03DRItITamwCsjdd5nZlcB8IAd40N2XmtlEoNTd5wEPAA+b2XLga4IgAdAKmG9mewie8C+JOPVPgJlAQ+DZ8JOVcnKgaVPYsOHAbRomWkRqigUv4aSH4uJiLy0tTXU2asRdd8FVV+2fVlCgkUJFpPrMbLG7F0enqydwHXHlldCtW/AGEGiYaBGpeQoAdcivfgV79sDcuRomWkRqngJAHXLWWcGT/333pTonIpINFADqkJycYMawBQtg2bJU50ZEMp0CQB1z2WWQlwd33JHqnIhIplMAqGMOOQQuvhhmzYKvvkp1bkQkkykA1EFjxgS9gtUWICI1SQGgDjr22GCo6Lvugu3bU50bEclUCgB11Nix8PnnMGdOqnMiIplKAaCOOuusoCRw223grqGiRST5FADqKLOgFPD228GIoCNHBkNEu+8bKlpBQESqQ2MB1WHbtgUdwzZtOnCoaAi2rVhR69kSkTSjsYDSUH4+XHFF7Js/aKhoEakeBYA6bvTo+Ns0VLSIVIcCQB3XsiWcfvqB6QUFMHly7edHRDKHAkAauOuu4GfTpkHjsIaKFpFkqOlJ4SUJOnWCfv3grbfgiy+CsYJERKpLJYA0MXZscPN/6KFU50REMoUCQJo480zo2RMmTdLwECKSHAoAacIsuPl/9hlMn57q3IhIJlAASCPf+Q707h28/ROvb4CISKISCgBm1tfMPjSz5WY2Lsb2PDObG25/08zah+m5ZjbLzN41sw/M7KaIY1aE6UvMLHu691ZDWSlgzRq4555U50ZE0l2FAcDMcoCpQD+gEzDYzDpF7XYp8I27HwncBtwSpp8P5Ll7Z6AbMKosOIROd/eiWF2UJbbevYOB4n7zG9i8WYPEiUjVJVIC6AEsd/dP3H0HMAcYGLXPQGBWuPw4cKaZGeBAIzOrDzQEdgAbk5LzLDZpUjBb2PDhGiRORKoukQDQGvgsYn1VmBZzH3ffBWwACgmCwX+ANcCnwBR3/zo8xoHnzGyxmY2M9+VmNtLMSs2sdO3atQlkN/P17Anf+x488QRs2bL/ti1bgtFDRUQqUtONwD2A3cBhQAfgOjM7Itx2irufQFC1dIWZ9Y51Anef5u7F7l7csmXLGs5u+pg4Efbsib1Ng8SJSCISCQCrgbYR623CtJj7hNU9TYF1wI+Av7r7Tnf/EngVKAZw99Xhzy+BPxEEC0lQUVEwHlAsGiRORBKRSABYBHQ0sw5m1gC4CJgXtc88YGi4PAhY4MFEA58CZwCYWSPgRGCZmTUysyYR6WcD71X3YrLN+PEHpmmQOBFJVIUBIKzTvxKYD3wAPOruS81sopkNCHd7ACg0s+XAWKDsVdGpQGMzW0oQSGa4+zvAIcArZvY28A/gaXf/azIvLBvceCOcfHLweihokDgRqRzNCJbmPvoIvv1tGDUKpk5NdW5EpC7SjGAZqmPHYNKYe+8NRgsVEUmUAkAGmDQJWrQIpo+M92aQiEg0BYAMcPDBcOut8MYbMGNGqnMjIulCASBDXHIJnHIK/PSnsG6dhogQkYppRrAMYQZ33w1du8IFFwSlgbJewmVDRIDeEBKRfVQCyCCdO8PVV8OCBRoiQkQqpgCQYSZMiL9NQ0SISCQFgAxz0EHBG0GxaIgIEYmkADuft3QAAA0jSURBVJCBbrstaPyNpCEiRCSaAkAGuvjiYMKYMhoiQkRiUQDIUDfeCD//ebD861/r5i8iB1IAyGDjx0OvXsE4QR99lOrciEhdowCQwerXhz/+ERo0gAsvhO3b1UFMRPZRR7AM17ZtMDzEwIEwYAC88oo6iIlIQCWALDBgAFx7LTz3nDqIicg+CgBZ4pZb4m9TBzGR7KQAkCUaNIDDDou9TR3ERLKTAkAW+e//DgJBJHUQE8leCgBZpKQEHnwQGjcO1ps3VwcxkWymAJBlSkrg66+hf//gp2YQE8leCgBZKDcXHnsMzjgDfvxj+NOf1D9AJBslFADMrK+ZfWhmy81sXIzteWY2N9z+ppm1D9NzzWyWmb1rZh+Y2U2JnlNqVn4+/PnP0L07nH8+XHpp0C/AfV//AAUBkcxWYQAwsxxgKtAP6AQMNrNOUbtdCnzj7kcCtwFlLx2eD+S5e2egGzDKzNoneE6pYY0bwzPPBE/927fvv039A0QyXyIlgB7Acnf/xN13AHOAgVH7DARmhcuPA2eamQEONDKz+kBDYAewMcFzSi1o1gx27oy9Tf0DRDJbIgGgNfBZxPqqMC3mPu6+C9gAFBIEg/8Aa4BPgSnu/nWC5wTAzEaaWamZla5duzaB7EpltWsXO139A0QyW003AvcAdgOHAR2A68zsiMqcwN2nuXuxuxe3bNmyJvKY9SZPDvoDRGrQQP0DRDJdIgFgNdA2Yr1NmBZzn7C6pymwDvgR8Fd33+nuXwKvAsUJnlNqSUlJ0B+grCSQlwc7dsDSpcFronpDSCQzJRIAFgEdzayDmTUALgLmRe0zDxgaLg8CFri7E1T7nAFgZo2AE4FlCZ5TalFJCaxYEbwFtHEjjBgRzCrWo0ewrDeERDJPhQEgrNO/EpgPfAA86u5LzWyimQ0Id3sAKDSz5cBYoOy1zqlAYzNbSnDTn+Hu78Q7ZzIvTKquQQO47z644w5YvBi2bt1/u94QEskMFjyop4fi4mIvLS1NdTayiln8dPUiFkkPZrbY3Yuj09UTWMpV3htCahsQSW8KAFKuWG8ImUFRUdAWoLYBkfSlACDlinxDyAwOOQRatQqGkdDsYiLpTQFAKlT2htCePfD55/DJJ/H3Ve9hkfShACCVVlCgtgGRTKAAIFUSq20Agk5kl12mtgGRdKAAIFUS3TbQtm0wycxHH8G2bfvvq7YBkbpJAUCqLLJt4NNP4amngqf+WD79VFVDInWNAoAkVby2gdxcTTojUtcoAEhSxWobqF8/mHOgvElnVDoQqX0KAJJU0W0D7drBzJnxq4ZWroSHH1anMpFUUACQpItsG1ixIliPVzUEwcT08TqVqWQgUnMUAKRWxKoaatgQrroKdu+OfUxZSUAlA5GaoQAgtSJW1dD998Odd5ZfOlDJQKTmaDhoSbnZs4Mn+8ibfYMGwaxk8TRsuP88BQUFQYApKam5fIqkKw0HLXVWrNLBgw+WXzKIN0mNSgYiiVMJQOqsWCWD/PwDexpHys0NXjktU1YygCBAfPppMF7R5MkqLUj2UAlA0k6sksH06eWXDCJv/hAEjxEjYPjw+I3JKjVItqqf6gyIlKekJPaTenTJoKDgwAbjMtHVRRDse8UV8Prr8MAD+0oVZcGhjEoNkslUApC0E6tkULZeGRs2wNSpsQevK6/UoBKDZAq1AUjGiNVmUFAQvDG0bt2B+7dtC599VrnvaNAg6OC2a9e+tIYNg1daQSUGqZuq1QZgZn3N7EMzW25m42JszzOzueH2N82sfZheYmZLIj57zKwo3LYwPGfZtlbVu0TJdvFKBnfccWAntIIC+M1vKl9q2LFj/5s/BFVMQ4cGn8gSw2WXBcNclFdiUGlCUsrdy/0AOcDHwBFAA+BtoFPUPj8B7g2XLwLmxjhPZ+DjiPWFQHFF3x/56datm4tUxR/+4N6unbtZ8PMPf9iXXlDgHty2g09BgXth4f5p1fmY7b+el+c+ZYr7zJmxv/sPf4ifX5GqAEo91v09VuJ+O8BJwPyI9ZuAm6L2mQ+cFC7XB74irF6K2OfXwOSIdQUAqRNi3WxrIzDE+zRp4p6fX7nAoIAh5YkXABJ5C6g1EFlTugroGW8fd99lZhuAwjAQlLkQGBh13Awz2w08AfwqzKhIrYr3phEcWKcPlWtnqIpNmw5M27IlaJSObH9YuTJorH7lFXjooX150ptMkqhaeQvIzHoCW9z9vYjkEnfvDJwafi6Jc+xIMys1s9K1a9fWQm5FArFGNa1sO0NhYexzt2uXvPaHe++NPWbSlVcGAUL9HySeREoAq4G2EettwrRY+6wys/pAUyDyeegi4I+RB7j76vDnJjN7BOgBPBT95e4+DZgGwVtACeRXpEYlo8RQG6WJ9esPTNuyBcaNO/C7VWrIUrHqhSI/BEHiE6AD+xqBj43a5wr2bwR+NGJbPYIAcUTUOVuEy7nA48DlFeVFbQCSjsqrn09G+0NOTuXbGerVi51eWBi/YVrSF1VtBA6O5Rzg/wjeBro5TJsIDAiX84HHgOXAP6Ju9n2AN6LO1whYDLwDLAXuAHIqyocCgGSLygSG0aMrFzCaNat8wCjLgxqa01O1AkBd+SgASLarzFtA8QJG2b7VLTU0bOj+8MOVL+FI7YsXANQTWCSDzZ4duz6/sr2mzYLbfqx0s6ChvExeXtDJrnlz+MlPDvwOjc5a++L1BFYAEMlSsYIDVG6gvapo3DgYtXX79v2/o7zAEC+QSWLiBYCUV+tU5qMqIJGaF6vapipVRpX95OYe2KCdl+d+wQVBdVNlOsbFu45shaqARKSqKltlVNbHYeXKmstTrIH58vJg4kRo0gSuuy72tKGQfaUMlQBEpFoq29CcyuE04n3y8tzr198/LT/ffciQypcy0qmEgd4CEpGaUBf7OdR0wBg+PH7AqOh3kgoKACJSZ9RkP4d27WqnzSLWp2lT92HD3Bs0iB0cUlWaUAAQkTovWf0c6mIpIyfnwL4UeXnugwZVrZG7MhQARCTjJKv6qbKljHgB4/DDkxcw8vODN6PiVTNVhgKAiIgnp5QRL2DUxiuz7dpV/prjBYBERgMVEckY8UZzrcworyUl0KtX/NdGK/PKbE4O7N6deP4//TTxfSuifgAiIklWmV7WQ4fCrFmV62OxYkXl8hOvH4BKACIiSZaM0gSUP5dEMqgEICJSRyWrd7JKACIiaaa8kkQy1MqcwCIiUvcoAIiIZCkFABGRLKUAICKSpRQARESyVFq9Bmpma4GqTjHRAvgqidlJF7ru7KLrzi6JXnc7d28ZnZhWAaA6zKw01nuwmU7XnV103dmlutetKiARkSylACAikqWyKQBMS3UGUkTXnV103dmlWtedNW0AIiKyv2wqAYiISAQFABGRLJXxAcDM+prZh2a23MzGpTo/NcnMHjSzL83svYi05mb2NzP7KPzZLJV5rAlm1tbMXjSz981sqZldE6Zn9LWbWb6Z/cPM3g6v+/+F6R3M7M3wb36umTVIdV5rgpnlmNk/zewv4XrGX7eZrTCzd81siZmVhmlV/jvP6ABgZjnAVKAf0AkYbGadUpurGjUT6BuVNg54wd07Ai+E65lmF3Cdu3cCTgSuCP+dM/3atwNnuPvxQBHQ18xOBG4BbnP3I4FvgEtTmMeadA3wQcR6tlz36e5eFPH+f5X/zjM6AAA9gOXu/om77wDmAANTnKca4+4vAV9HJQ8EZoXLs4Dv12qmaoG7r3H3t8LlTQQ3hdZk+LWH831vDldzw48DZwCPh+kZd90AZtYGOBeYHq4bWXDdcVT57zzTA0Br4LOI9VVhWjY5xN3XhMufA4ekMjM1zczaA12BN8mCaw+rQZYAXwJ/Az4G1rv7rnCXTP2bvx24EdgTrheSHdftwHNmttjMRoZpVf4714xgWcTd3cwy9r1fM2sMPAFc6+4bg4fCQKZeu7vvBorM7GDgT8AxKc5SjTOz/sCX7r7YzPqkOj+17BR3X21mrYC/mdmyyI2V/TvP9BLAaqBtxHqbMC2bfGFmhwKEP79McX5qhJnlEtz8Z7v7/4bJWXHtAO6+HngROAk42MzKHu4y8W++FzDAzFYQVOueAdxB5l837r46/PklQcDvQTX+zjM9ACwCOoZvBzQALgLmpThPtW0eMDRcHgr8OYV5qRFh/e8DwAfu/vuITRl97WbWMnzyx8waAmcRtH+8CAwKd8u463b3m9y9jbu3J/g/vcDdS8jw6zazRmbWpGwZOBt4j2r8nWd8T2AzO4egvjAHeNDdJ6c4SzXGzP4I9CEYIvYLYDzwJPAocDjBUNoXuHt0Q3FaM7NTgJeBd9lXJ/wzgnaAjL12M+tC0OiXQ/Aw96i7TzSzIwiejJsD/wQudvftqctpzQmrgK539/6Zft3h9f0pXK0PPOLuk82skCr+nWd8ABARkdgyvQpIRETiUAAQEclSCgAiIllKAUBEJEspAIiIZCkFABGRLKUAICKSpf4/39R8RcxKrBYAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 454
        },
        "id": "nznTacPFa_sg",
        "outputId": "d883d71a-941f-4e69-cbde-5a4d3d679cb9"
      },
      "source": [
        "comp = encoder.predict(X_test)\n",
        "pred = autoencoder.predict(X_test)\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(X_test[i].reshape((28, 28)), cmap='gray')\n",
        "plt.show()\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Compressed Image\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(comp[i].reshape((8, 8)), cmap='gray')\n",
        "plt.show() \n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Reconstruction of Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(pred[i].reshape((28, 28)), cmap='gray')  \n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Compressed Image\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Reconstruction of Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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EEIIIXKKvvgRQgghhBBCCCGEyCn64kcIIYQQQgghhBAip6SynXs1KLclHOs3AeDdd991ttUd8rlc52DRokXeeW3btnX2/PnzvWNRNWE233xz7+fFixfHDbumVLuuzxZbbOHst956y9l9+vTxznvwwQed3a1bN2d37drVO++CCy6IvMayZcuczfp4++y8/fbbkeOtUF2f1PKDH/zA2Xy/mqKU2kddunRxNreWBoApU6Y4+7e//a13bNy4cc7eeefv5K4ffPCBdx7XborTY2cFbkuZtE1kXE2fdddd1/s5qkUv1ysA/Bo/fP9tjaX777/f2XvssYd3jOt08fVs29rJkyc3OqZiqEdrzyAIsOaaawIAWrVq5R3jGmLVoPC5gN9e1Y6D68Css846zj7kkEO88/7yl784e5999vGOcW2uo48+2tkPPPCAdx7P8y+99FLs+AtkoQZEY3C9AY4p+2zHEVXrI+4avXr1crbde3BNuyOPPNI79uabbzqba/zYVuy81r766qvesTS1FE4TrVu3dvbSpUsT/Q7Hil2DuaahrW+45557Opvr/dhaMbzWPvvss94xfna51oatKVfL+jNphfc8lq222srZ9l2Ca/z07NnTO8a1SXgfauuecK0vu46XUt+kHu3b7TNVr711XH0jfjez74u8p/zlL3/pHVuyZImz+/fv7+xXXnklchw8D8dh6+zVs115JahEjce4Z57nU1ufkufJTp06ece4Zh5f387JPGe+/PLL3jGuC1XtNVIZP0IIIYQQQgghhBA5RV/8CCGEEEIIIYQQQuSU1UbqxRKdH/3oR862qWOczjVgwABnc/tFABg8eLCzJ0yY4B076KCDnM3pXLalI7e3tenWUcRJu2wrSJveW0843ZTTh1leAPgpbnb8LO/acccdnR3XmnT77bd3NvsdAGbNmuVsm/43adIkZ3Orb5tyymm6NnWP02qjpDFpJOm4S22DyGm6LPnhlu0A8PDDDzubpZosUwD8OLUxwM8XyxG6d+/unTdjxozI8fKzW4wEIy3YdF9OV+YUdJZuWOKegx49ejjbppKzJPakk05ytpWVde7cOfIaPPeyP60kb99993W2lX3xc8bxbOFU6Lh22JUkDEOXMl5taZeF7yfHmE1VZ6nX//zP/zT6OwBw9913O9u2tOXUaU5V33333b3z/vOf/yQaO5MVaZel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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "yIaRRY6td1tR"
      },
      "source": [
        "# Building the model - Experiment_SGD(with momentum)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "aZw5ay67d1ta",
        "outputId": "dff7b60f-108a-48f4-e555-dcce005121c4"
      },
      "source": [
        "#Encoder\n",
        "encoder_input = keras.Input(shape=(28, 28, 1), name='img')\n",
        "x = keras.layers.Flatten()(encoder_input)\n",
        "encoder_output = keras.layers.Dense(64, activation=\"relu\")(x)\n",
        "\n",
        "encoder = keras.Model(encoder_input, encoder_output, name='encoder')\n",
        "\n",
        "#decoder\n",
        "decoder_input = keras.layers.Dense(64, activation=\"relu\")(encoder_output)\n",
        "x = keras.layers.Dense(784, activation=\"relu\")(decoder_input)\n",
        "decoder_output = keras.layers.Reshape((28, 28, 1))(x)\n",
        "\n",
        "#autoencoder\n",
        "autoencoder = keras.Model(encoder_input, decoder_output, name='autoencoder')\n",
        "\n",
        "autoencoder.summary()\n",
        "\n",
        "#compile the model\n",
        "autoencoder.compile(loss='mean_squared_error', optimizer = SGD(momentum=0.9))\n",
        "\n",
        "#fit the model\n",
        "autoencoder_train = autoencoder.fit(train_X, train_ground, batch_size=128, epochs=50, validation_data=(valid_X, valid_ground))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"autoencoder\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "img (InputLayer)             [(None, 28, 28, 1)]       0         \n",
            "_________________________________________________________________\n",
            "flatten_1 (Flatten)          (None, 784)               0         \n",
            "_________________________________________________________________\n",
            "dense_3 (Dense)              (None, 64)                50240     \n",
            "_________________________________________________________________\n",
            "dense_4 (Dense)              (None, 64)                4160      \n",
            "_________________________________________________________________\n",
            "dense_5 (Dense)              (None, 784)               50960     \n",
            "_________________________________________________________________\n",
            "reshape_1 (Reshape)          (None, 28, 28, 1)         0         \n",
            "=================================================================\n",
            "Total params: 105,360\n",
            "Trainable params: 105,360\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n",
            "Epoch 1/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.1042 - val_loss: 0.0893\n",
            "Epoch 2/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0842 - val_loss: 0.0757\n",
            "Epoch 3/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0746 - val_loss: 0.0736\n",
            "Epoch 4/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0731 - val_loss: 0.0725\n",
            "Epoch 5/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0721 - val_loss: 0.0712\n",
            "Epoch 6/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0707 - val_loss: 0.0702\n",
            "Epoch 7/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0695 - val_loss: 0.0690\n",
            "Epoch 8/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0685 - val_loss: 0.0674\n",
            "Epoch 9/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0664 - val_loss: 0.0654\n",
            "Epoch 10/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0647 - val_loss: 0.0636\n",
            "Epoch 11/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0626 - val_loss: 0.0608\n",
            "Epoch 12/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0601 - val_loss: 0.0586\n",
            "Epoch 13/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0580 - val_loss: 0.0569\n",
            "Epoch 14/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0563 - val_loss: 0.0553\n",
            "Epoch 15/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0547 - val_loss: 0.0537\n",
            "Epoch 16/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0532 - val_loss: 0.0524\n",
            "Epoch 17/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0518 - val_loss: 0.0512\n",
            "Epoch 18/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0507 - val_loss: 0.0500\n",
            "Epoch 19/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0497 - val_loss: 0.0489\n",
            "Epoch 20/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0484 - val_loss: 0.0477\n",
            "Epoch 21/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0472 - val_loss: 0.0468\n",
            "Epoch 22/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0465 - val_loss: 0.0460\n",
            "Epoch 23/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0455 - val_loss: 0.0451\n",
            "Epoch 24/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0447 - val_loss: 0.0443\n",
            "Epoch 25/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0440 - val_loss: 0.0437\n",
            "Epoch 26/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0433 - val_loss: 0.0431\n",
            "Epoch 27/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0425 - val_loss: 0.0425\n",
            "Epoch 28/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0422 - val_loss: 0.0419\n",
            "Epoch 29/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0415 - val_loss: 0.0411\n",
            "Epoch 30/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0406 - val_loss: 0.0405\n",
            "Epoch 31/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0402 - val_loss: 0.0400\n",
            "Epoch 32/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0395 - val_loss: 0.0395\n",
            "Epoch 33/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0392 - val_loss: 0.0391\n",
            "Epoch 34/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0388 - val_loss: 0.0386\n",
            "Epoch 35/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0383 - val_loss: 0.0382\n",
            "Epoch 36/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0380 - val_loss: 0.0379\n",
            "Epoch 37/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0375 - val_loss: 0.0375\n",
            "Epoch 38/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0371 - val_loss: 0.0372\n",
            "Epoch 39/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0369 - val_loss: 0.0368\n",
            "Epoch 40/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0365 - val_loss: 0.0365\n",
            "Epoch 41/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0362 - val_loss: 0.0362\n",
            "Epoch 42/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0359 - val_loss: 0.0359\n",
            "Epoch 43/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0355 - val_loss: 0.0356\n",
            "Epoch 44/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0353 - val_loss: 0.0353\n",
            "Epoch 45/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0350 - val_loss: 0.0350\n",
            "Epoch 46/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0346 - val_loss: 0.0348\n",
            "Epoch 47/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0344 - val_loss: 0.0345\n",
            "Epoch 48/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0342 - val_loss: 0.0343\n",
            "Epoch 49/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0339 - val_loss: 0.0341\n",
            "Epoch 50/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0338 - val_loss: 0.0338\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "id": "QDFz5LqZd1tf",
        "outputId": "ec4652c7-b48f-4571-c95f-eddc38ab3239"
      },
      "source": [
        "loss = autoencoder_train.history['loss']\n",
        "val_loss = autoencoder_train.history['val_loss']\n",
        "epochs = range(50)\n",
        "plt.figure()\n",
        "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
        "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
        "plt.title('Training and validation loss')\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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7W8ZOXIkw4YNY/r06WzevHnH511++eWMGjWKYcOGsXTp0jqPr7WnM/Y4ejOr5fzzYfHipt3niBFw7bX51/fs2ZOxY8fywAMPMGnSJBYsWMCXvvQlJDF37lx69uzJ9u3bOeaYY3j++ecZPnx4zv08++yzLFiwgMWLF7Nt2zZGjRrF6NGjATj55JOZMWMGAN/5zne45ZZb+NrXvsYJJ5zA8ccfz+TJk2vta9OmTUybNo3f/va3HHjggZxxxhn86Ec/4vzzzwdgr7324rnnnuPGG2/k6quv5uabb857fK09nbF79GZWFDLTN5lpm7vvvptRo0YxcuRIlixZUivNku3xxx/npJNOokuXLnTv3p0TTjhhx7oXX3yRI444gmHDhjF//nyWLFlSZ3tefvllBg0axIEHHgjA1KlTeeyxx3asP/nkkwEYPXr0jonQ8nniiSc4/fTTgdzTGV9//fWsWbOGdu3aMWbMGG677TbmzJnDCy+8QLdu3ercdyHcozezWurqeTenSZMmccEFF/Dcc8+xYcMGRo8ezWuvvcbVV1/NM888w5577sm0adPyTk9cn2nTpnHvvfdyyCGHcPvtt/Poo482qr01Ux03Zprj2bNnc9xxx3H//fczfvx4HnzwwR3TGd93331MmzaNCy+8kDPOOKNRbXWP3syKQteuXTnqqKOYPn36jt78unXr2H333enRowdvv/02DzzwQJ37OPLII7n33nvZuHEj69ev5xe/+MWOdevXr+djH/sYW7du3TG1MEC3bt1Yv379TvsaMmQIK1asYNmyZQDceeedfOpTn9qlY2vt6YzdozezojFlyhROOumkHSmcmml9DzroIPr168f48ePr3H7UqFGceuqpHHLIIey9996MGTNmx7rvfve7jBs3jt69ezNu3Lgdwf20005jxowZXH/99TsuwgJ06tSJ2267jVNOOYVt27YxZswYZs2atUvHVfMs2+HDh9OlS5da0xk/8sgj7Lbbbhx88MFMnDiRBQsW8P3vf5/27dvTtWvXJnlAiacpNjNPU9zGeJpiMzOrxYHezKzEFRToJR0r6WVJyyTNzrG+o6S70vVPSxqYlneQdJukFyT9WdKEJm29mTWZYkvjWm678nuqN9BLqgBuACYCQ4EpkoZmVTsTeD8iDgCuAa5Ky2ekDRsGfAb4d0n+FmFWZDp16kR1dbWDfZGL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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 454
        },
        "id": "e8q2Pde4d1ti",
        "outputId": "6b55b808-021f-4a21-dc60-4934a65cd4ed"
      },
      "source": [
        "comp = encoder.predict(X_test)\n",
        "pred = autoencoder.predict(X_test)\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(X_test[i].reshape((28, 28)), cmap='gray')\n",
        "plt.show()\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Compressed Image\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(comp[i].reshape((8, 8)), cmap='gray')\n",
        "plt.show() \n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Reconstruction of Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(pred[i].reshape((28, 28)), cmap='gray')  \n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABH4AAACACAYAAAB9Yq5jAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3de7xXU/748feSEBGlEl2Ve0glMdUUjUvkWkRjGrcYGbmlXIbcv78id6V5SEkSCiG5NIUQU0NNd2Uq0VWJKEr790fH8l678/n0OZ/L/uy9zuv5ePTovc7an73fep/1OZ+z7bWWCYJAAAAAAAAA4J8dip0AAAAAAAAACoMbPwAAAAAAAJ7ixg8AAAAAAICnuPEDAAAAAADgKW78AAAAAAAAeIobPwAAAAAAAJ7K6caPMeZkY8w8Y8wCY0yffCWFaFHH5KOGfqCOyUcN/UAdk48a+oE6Jh819AN1TD4TBEF2LzSmgojMF5E/ichSEfm3iJwfBMHs/KWHQqOOyUcN/UAdk48a+oE6Jh819AN1TD5q6Afq6Icdc3htCxFZEATBlyIixpjnReQMEUn5DWCMye4uE3IWBIFJ0VWmOlLDolodBEH1Ur7OWEwQxqIXGIseYCx6gbHoAcaiFxiLHmAseiHVWMxpqtd+IvKVai8t+RqShTomx+IUX6eGfqCOycFY9Bt1TA7Got+oY3IwFv1GHZMj1VjM6YmfjBhjuotI90JfB4VDDf1AHZOPGvqBOiYfNfQDdUw+augH6ph81DD+crnx87WI1FHt2iVfcwRBMFhEBovw2FdMbbeO1DD2GIt+YCwmH2PRD4zF5GMs+oGxmHyMRT8wFj2Qy1Svf4vIAcaYBsaYnUSki4iMzU9aiBB1TD5q6AfqmHzU0A/UMfmooR+oY/JRQz9QRw9k/cRPEASbjTFXichbIlJBRIYEQTArb5khEtQx+aihH6hj8lFDP1DH5KOGfqCOyUcN/UAd/ZD1du5ZXYzHvoomzSrtZUINi2paEATN83Ei6lg8jEUvMBY9wFj0AmPRA4xFLzAWPcBY9ELKsZjLVC8AAAAAAADEGDd+AAAAAAAAPMWNHwAAAAAAAE/lsp07UDQ33HCDjStVquT0HXHEETbu1KlTynMMHDjQxh9//LHTN3z48FxTBAAAAACg6HjiBwAAAAAAwFPc+AEAAAAAAPAUN34AAAAAAAA8xRo/SIxRo0bZON3aPdqWLVtS9l1++eU2bt++vdP33nvv2XjJkiWZpogiO/DAA5323LlzbdyzZ08bP/roo5HlVJ7ttttuNu7fv7+N9dgTEZk2bZqNO3fu7PQtXry4QNkBAAAUx1577WXjunXrZvSa8Geia6+91sYzZ8608fz5853jpk+fnk2K8AxP/AAAAAAAAHiKGz8AAAAAAACeYqoXYktP7RLJfHqXnt7z1ltv2Xj//fd3juvYsaONGzZs6PR17drVxvfdd19G10XxHXXUUU5bT/VbunRp1OmUe7Vq1bLxZZddZuPwFMxmzZrZ+LTTTnP6Hn/88QJlB61p06Y2HjNmjNNXv379gl33xBNPdNpz5syx8VdffVWw62L79M9IEZGxY8fa+KqrrrLxoEGDnON+/fXXwibmoRo1atj4hRdesPFHH33kHDd48GAbL1q0qOB5/aZKlSpOu02bNjYeP368jTdt2hRZTkASnHrqqTY+/fTTnb62bdvauFGjRhmdLzyFq169ejbeeeedU76uQoUKGZ0ffuOJHwAAAAAAAE9x4wcAAAAAAMBTTPVCrDRv3tzGZ511VsrjZs2aZePwo5OrV6+28fr162280047OcdNmTLFxkceeaTTV61atQwzRpw0adLEaf/44482fvnll6NOp9ypXr260x42bFiRMkFZnXTSSTZO97h4voWnE1188cU27tKlS2R5YCv9s++JJ55Iedxjjz1m4yFDhjh9GzZsyH9intG7+Yi4n2n0tKoVK1Y4xxVrepfeeVHEfa/XU3UXLFhQ+MQSZo899nDaevmAxo0b2zi8uyzT5uJNLxHRo0cPG+tp7SIilSpVsrExJufrhnevBcqCJ34AAAAAAAA8xY0fAAAAAAAAT3HjBwAAAAAAwFOJXuMnvL23nlf5zTffOH0bN2608YgRI2y8fPly5zjmJxeX3v45PBdWz4HX61EsW7Yso3Nff/31TvvQQw9Neewbb7yR0TlRfHqOvN5iWERk+PDhUadT7lx99dU2PvPMM52+Fi1alPl8eptgEZEddvj9/09Mnz7dxu+//36Zzw3Xjjv+/hGgQ4cORckhvHbIddddZ+PddtvN6dNrdqEw9PirXbt2yuNGjhxpY/35CqntvffeNh41apTTV7VqVRvrtZX+/ve/Fz6xFG699VYbN2jQwOm7/PLLbczn5m117drVxvfcc4/TV6dOnVJfE14L6Ntvv81/Ysgb/f7Ys2fPgl5r7ty5Nta/CyF/GjVqZGP9Xi3irjnbtm1bp2/Lli02HjRokI0//PBD57i4vE/yxA8AAAAAAICnuPEDAAAAAADgqURP9erXr5/Trl+/fkav04+o/vDDD05flI/QLV261Mbh/5apU6dGlkecvPbaazbWj92JuLVas2ZNmc8d3hq4YsWKZT4H4ufggw+2cXhqSPhxeuTfgw8+aGP9yGu2zj777JTtxYsX2/i8885zjgtPGcL2tWvXzsbHHnusjcM/jwopvK21noK76667On1M9cq/nXfe2WnfcsstGb1OT6MNgiCvOfmqadOmNg5PF9DuvPPOCLLZ1mGHHea09fT4l19+2enjZ+u29NSfhx56yMbVqlVzjks1Xh599FGnraeuZ/OZF5kJT+vR07b0dJ3x48c7x/388882XrdunY3DP6f059K3337b6Zs5c6aNP/nkExt/9tlnznEbNmxIeX5kTi8NIeKOMf1ZM/w9kaljjjnGxps3b3b65s2bZ+PJkyc7ffp77pdffsnq2pniiR8AAAAAAABPceMHAAAAAADAU9z4AQAAAAAA8FSi1/jR27eLiBxxxBE2njNnjtN3yCGH2DjdPOuWLVva+KuvvrJxqu0XS6Pn9a1atcrGeqvysCVLljjt8rrGj6bX88hWr169bHzggQemPE7PrS2tjfi68cYbbRz+nmEcFca4ceNsrLdbz5betnb9+vVOX7169WystxT+9NNPneMqVKiQcx6+C89v11tyL1y40Mb33ntvZDmdccYZkV0L2zr88MOddrNmzVIeqz/bvPnmmwXLyRc1atRw2uecc07KYy+55BIb68+NhabX9Xn33XdTHhde4ye8PiZEbrjhBhtXrVq1zK8Pr1t38skn2zi8JbxeD6jQa4L4KN26O0ceeaSN9TbeYVOmTLGx/r1y0aJFznF169a1sV7bVSQ/6yJiW/p+QI8ePWwcHmN77LFHqa//+uuvnfYHH3xg4//9739On/4dRK812aJFC+c4/Z7QoUMHp2/69Ok21lvCF8J2P7EbY4YYY1YaY2aqr1U1xrxjjPmi5O+90p0DxUcdvVCfGiYfY9ELjEUPMBa9wFj0AGPRC4xFDzAW/ZbJ/6odKiInh77WR0QmBEFwgIhMKGkj3oYKdUy61UINfTBUqGPSMRb9MFSoY9IxFv0wVKhj0jEW/TBUqKO3tjvVKwiC940x9UNfPkNE2pbEw0Rkkoj0zmNeGZkwYULathbehu834a1kmzRpYmP9yNbRRx+dcV4bN2608fz5820cnn6mH/vSj9kXQpzrmG+nnXaajfW2qDvttJNz3MqVK2180003OX0//fRTgbLLyXoRCe/p6WUN06lfv77Tbt68uY31eBOJ57aXSRyLf/zjH532QQcdZGP9qHKmjy2HH2XVj1rrbVFFRI4//ngbp9tq+m9/+5uNBw4cmFEeOUjkWLz11ludtn7cXU8rCE+3yzf9sy/8vRXlo+9JHIv5lm76UVh4SkRMxHYsPvDAA077z3/+s43150sRkRdffDGSnMJat25t45o1azp9Q4cOtfGzzz5b0DySOBb1NGQRkYsuuqjU42bMmOG0V6xYYeP27dunPH+VKlVsrKeRiYiMGDHCxsuXL99+stGI7VgMf/5/7rnnbKyndom4U53TTX/UwtO7tPBSHnGXxLH45JNPOm09RS/d1uz6vsF///tfG998883Ocfr3+rDjjjvOxvpz6JAhQ5zj9P0F/R4gIvL444/bePTo0TYuxLTfbBdnqBkEwbKSeLmI1Ex3MGKLOiYfNfQDdUw+augH6ph81NAP1DH5qKEfqKMncl7cOQiCwBgTpOo3xnQXke65XgeFla6O1DAZGIt+YCwmH2PRD4zF5GMs+oGxmHyMRT8wFpMt2xs/K4wxtYIgWGaMqSUiK1MdGATBYBEZLCKSbsAXy9q1a532xIkTSz0u3TSydPRj1OFpZfqxslGjRmV1/hxlVMe41zBMT/0JP96p6X/z9957r6A5FZA3YzFT4akhWpS7oeRZ7MainlL3/PPPO33pHp3V9C5r+vHVO+64wzku3dRKfY7u3X//PFG9enXnuH79+tl4l112cfoee+wxG2/atGl7aWcrlmOxU6dONg7vJLFgwQIbR7kDnp6yF57aNWnSJBt/9913UaWkxW4sFlKbNm1S9oV3C0o31TJmYjEWg8A9nf5e/+abb5y+Qu7MVKlSJaetpzFceeWVNg7ne/HFFxcspwzFeizqqRsiIrvvvruN9S5A4c8s+ufT+eefb+Pw9JKGDRvaeJ999nH6Xn31VRufcsopNl6zJjzTquiKNhYrV65s4/ByDnpJiNWrVzt9999/v41juuxDMRR9LIY/1+ndtC699FKnzxhjY/17QXgZgP79+9s426UhqlWrZmO9u2zfvn2d4/SSM+FpolHKdqrXWBHpVhJ3E5FX0xyL+KKOyUcN/UAdk48a+oE6Jh819AN1TD5q6Afq6IlMtnMfKSIfi8hBxpilxphLROT/RORPxpgvRKR9SRsxRh290ECoYeIxFr3AWPQAY9ELjEUPMBa9wFj0AGPRb5ns6nV+iq4T8pwLCog6euF/QRA0L+Xr1DBBGIteYCx6gLHoBcaiBxiLXmAseoCx6LecF3fGtmrUqGHjJ554wsY77OA+YKW3Go/hvNzEeOWVV5z2iSeeWOpxzzzzjNMOb22MZDj88MNT9ul1XpCbHXf8/cdDpmv6hNfK6tKli43D8+gzpdf4ue+++2w8YMAA57hdd93VxuHvg7Fjx9p44cKFWeWRVJ07d7ax/jcScX8+FZpeM6pr1642/vXXX53j7r77bhsXcD2mck1vP6vjsPCaB59//nnBcipvTj31VKf99ttv21ivbRVekyJTel2Ztm3bOn0tW7Ys9TUvvfRSVtcqr3beeWenrddIevDBB1O+Tm8N/fTTT9tYv1eLiOy///4pz6HXnink+lBJduaZZ9q4T58+Tp/eYr1169ZO37p16wqbGLISfh/r1auXjfWaPiIiX3/9tY31WruffvppVtfWa/fUqVPH6dO/W44bN87G4XV9tXC+w4cPt3Gh1zbMdo0fAAAAAAAAxBw3fgAAAAAAADzFVK8C6NGjh431lsPhrePnzZsXWU6+qVWrlo3Dj6rrx2/19BI9hUBEZP369QXKDvmmH02/6KKLnL7PPvvMxu+8805kOWErvQ14ePvfbKd3paKnbOnpQiIiRx99dF6vlVRVqlRx2qmmdYhkP40kG927d7exnjo4Z84c57iJEydGllN5lelYifL7w0cPP/yw027Xrp2N9913X6evTZs2NtbTAE4//fSsrq3PEd6mXfvyyy9tHN5OHOnprdjD9FS+8HIEqTRvXtryOKWbMmWKjfksW7p001j158alS5dGkQ5ypKdbiWw7TVzbvHmzjY855hgbd+rUyTnu4IMPLvX1GzZscNqHHHJIqbGI+zm3Zs2aKXPSVqxY4bSjnOLOEz8AAAAAAACe4sYPAAAAAACAp5jqlQd/+MMfnHZ49fjf6BXmRURmzpxZsJx8N3r0aBtXq1Yt5XHPPvusjcvbbj4+ad++vY2rVq3q9I0fP97GercM5E94R0JNP0ZbaHr6QjindDn27dvXxhdeeGHe84qT8E4z++23n41HjhwZdTpWw4YNS/06Pwejl25KST52lMJW06ZNc9pHHHGEjZs0aeL0nXzyyTbWu9WsWrXKOW7YsGEZXVvvEjN9+vSUx3300Uc25jNS2YTfT/W0PD2dMjydRO9MetZZZ9k4vAuQHovhvssuu8zGutazZ8/OKPfyIDytR9Pj7fbbb3f6Xn31VRuzk2F8/Otf/3Laelq4/h1BRKRu3bo2fuSRR2ycbtqrnjoWnlaWTqrpXVu2bHHaL7/8so2vvvpqp2/ZsmUZXy9XPPEDAAAAAADgKW78AAAAAAAAeIobPwAAAAAAAJ5ijZ886NChg9OuWLGijSdMmGDjjz/+OLKcfKTnTzdt2jTlcZMmTbJxeO4ukunII4+0cXiO7ksvvRR1OuXCFVdcYePwXOVi6dixo42POuoop0/nGM5Xr/Hjux9++MFp6zUK9BojIu56WWvWrMlrHjVq1HDaqdZbmDx5cl6vi9K1atXKxhdccEHK49atW2djtjnOr7Vr19pYr08Rbvfu3Tvna+2///421mujibjvCTfccEPO1yqv3n33Xaetx45exye87k6qdUbC5+vRo4eNX3/9dafvgAMOsLFeL0T/3C7vqlevbuPwZwK9Ft5tt93m9N166602HjRokI2nTJniHKfXkVmwYIGNZ82alTKnww47zGnr3wt5v00vvMW6Xh9rzz33dPr0Wrt6Hd5vv/3WOW7JkiU21t8T+ncOEZEWLVqUOd/Bgwc77ZtvvtnGev2uqPHEDwAAAAAAgKe48QMAAAAAAOAppnplqVKlSjbW2wKKiPzyyy821lONNm3aVPjEPBLepl0/Jqen04Xpx5jXr1+f/8QQiX322cfGrVu3tvG8efOc4/QWicgfPa0qSvrxbBGRQw891Mb6PSCd8BbI5em9N/w4tN6i+ZxzznH63njjDRsPGDCgzNdq3Lix09bTS+rXr+/0pZreEJdphL7TP0932CH1//N75513okgHBaanr4THnp5KFn6vRObC02PPPfdcG+sp6FWqVEl5jkcffdTG4Sl+GzdutPGYMWOcPj2V5aSTTrJxw4YNneP0+395c//999v4uuuuy/h1+v3xyiuvLDXOFz3+9DIVXbp0yfu1fBaeOqXHRzaeeeYZp51uqpeeXq+/z4YOHeocp7eLLyae+AEAAAAAAPAUN34AAAAAAAA8xY0fAAAAAAAAT7HGT5Z69epl4/C2wuPHj7fxRx99FFlOvrn++uud9tFHH13qca+88orTZgt3P/z1r3+1sd4a+s033yxCNojKLbfc4rT1lrbpLFq0yMbdunVz+vSWneWNfj8Mb+t86qmn2njkyJFlPvfq1audtl5LZO+9987oHOF58CiMTp06lfr18NoITz75ZBTpIM86d+7stP/yl7/YWK9BIbLtlsbID70dux5vF1xwgXOcHnN6LSa9pk/YXXfd5bQPOeQQG59++umlnk9k25+F5Yle52XUqFFO33PPPWfjHXd0fxWuU6eOjdOth5YPek1D/T2jt5QXEbn77rsLmgdEbrzxRhuXZY2lK664wsbZfI6KGk/8AAAAAAAAeIobPwAAAAAAAJ5iqleG9CPxIiL/+Mc/bPz99987fXfeeWckOfku0+0Xr7rqKqfNFu5+qFevXqlfX7t2bcSZoNDGjRtn44MOOiirc8yePdvGkydPzjknX8ydO9fGerthEZEmTZrYuFGjRmU+t96yOGzYsGFOu2vXrqUeF95+HvlRu3Ztpx2ebvKbpUuXOu2pU6cWLCcUzimnnJKy7/XXX3fa//nPfwqdTrmnp33pOFvh90k9dUlP9WrXrp1zXNWqVW0c3n7ed3r77PD72oEHHpjydSeccIKNK1asaOO+ffs6x6VafiJbeip2s2bN8npulO7SSy+1sZ5eF57+p82aNctpjxkzJv+JFRBP/AAAAAAAAHiKGz8AAAAAAACeYqpXGtWqVbPxI4884vRVqFDBxnqagojIlClTCpsYHPpRVhGRTZs2lfkc69atS3kO/ahnlSpVUp5jzz33dNqZTlXTj6P27t3b6fvpp58yOoePTjvttFK//tprr0WcSfmkHztOt7NFuikGgwcPtvG+++6b8jh9/i1btmSaoqNjx45Zva48+/zzz0uN8+HLL7/M6LjGjRs77ZkzZ+Y1j/LquOOOc9qpxnB4V0wkU/h9+Mcff7TxAw88EHU6KLAXXnjBxnqq13nnneccp5dCYBmKzEyYMKHUr+up0SLuVK/Nmzfb+Omnn3aO++c//2nja665xulLNQUXhdGiRQunrd8bK1eunPJ1egkRvYuXiMjPP/+cp+yiwRM/AAAAAAAAntrujR9jTB1jzERjzGxjzCxjTM+Sr1c1xrxjjPmi5O+9Cp8uskUNvVCROiYfNfQCY9ED1NALjEUPUEMvMBY9QA39lskTP5tF5PogCA4VkZYi0sMYc6iI9BGRCUEQHCAiE0raiC9q6AfqmHzU0A/UMfmooR+oY/JRQz9Qx+Sjhh7b7ho/QRAsE5FlJfEPxpg5IrKfiJwhIm1LDhsmIpNEpHcpp0gUvXbP+PHjbdygQQPnuIULF9pYb+0eV0EQ/Kfkb+9qOGPGjJzP8eKLLzrtZcuW2bhmzZo2Ds+fzrfly5c77XvuuUc3N/lcx1atWjntffbZp0iZFFZSajhw4EAb9+vXL+VxeqvgdOvzZLp2T6bHDRo0KKPjCsTrsZgPeo2o0tq/KeaaPj7XUK9RGLZ69WobP/zww1GkU0jldizqtSb05xQRkZUrV9o4Cdu3l9caZkv/nNQ/n8844wznuNtvv93Gzz//vNM3f/78fKfl9Vh8++23nbb+fK63/77sssuc4xo1amTjtm3bZnStpUuXZpFhfvhcw/BakLvvvnupx+k10kTcdbQ+/PDD/CcWoTIt7myMqS8iR4nIJyJSs+SmkIjIchGpmeI13UWke/YpIp+ooR+oY/JRQz9Qx+Sjhn6gjslHDf1AHZOPGvop48WdjTGVRWS0iFwTBMH3ui8IgkBEgtJeFwTB4CAImgdB0DynTJEzaugH6ph81NAP1DH5qKEfqGPyUUM/UMfko4b+yuiJH2NMRdn6DTAiCIIxJV9eYYypFQTBMmNMLRFZmfoMydGwYUMbN2vWLOVxeqtuPe0rrpJYw3Hjxjnt8COs+dS5c+esXqe3cEw3RWXs2LE2njp1asrjPvjgg7TXS2IdM3XWWWc5bT3t8rPPPrPx+++/H1lOhZCUGo4ZM8bGvXr1cvqqV69esOuuWrXKac+ZM8fG3bv//j+S9HTMYkhKHYtl62fD1O048LmGJ510Usq+JUuW2HjdunVRpFNQPtcxHT3VKzy+3njjjZSv09Mb9trr9zVa9fdF1MprDfPh888/t/Ftt93m9PXv39/G9957r9N34YUX2njDhg15ycXnOurPIiIiL7zwgo3PPffclK9r165dyr5ff/3VxnrM9ulTvCV0fKuhfr+78cYbM3rNiBEjnPakSZPymVJRZbKrlxGRp0RkThAEA1TXWBHpVhJ3E5FX858e8oga+oE6Jh819AN1TD5q6AfqmHzU0A/UMfmooccyeeLnDyJyoYj81xjz223lm0Xk/0TkBWPMJSKyWERS3+5EHFDD5Kss1NEH1DD5GIt+oIbJx1j0AzVMPsaiH6ihxzLZ1WuyiJS+HYfICflNB4USBAE1TL711DH5qKEXGIseoIZeYCx6gBp6gbHoAWrotzLt6uWjevXqOe3wdn2/Ca9xobcwRmGcffbZTlvPzaxYsWJG5zjssMNsXJat2IcMGWLjRYsWpTxu9OjRNp47d27G58dWu+66q407dOiQ8riXXnrJxnpONApn8eLFNu7SpYvTd+aZZ9q4Z8+eeb2u3iJVROTxxx/P6/kRjV122SVlX77Wk4BL/1zU6xWGbdy40cabNm0qaE4oDv1zsmvXrk7ftddea+NZs2bZuFu3boJke+aZZ5z25ZdfbuPwZ+o777zTxjNmzChsYh4I/9y65pprbFy5cmUbN2/urmtco0YNG4d/nxg+fLiN+/btm4csIeLWY/bs2TZO97ujHgO6tr7JeFcvAAAAAAAAJAs3fgAAAAAAADxV7qd66e2BRUTq1q1b6nHvvfee047j1rS+69evX06vv+CCC/KUCfJFTzNYu3at0zd27FgbP/zww5HlhG29//77Kdt6emz4/bRjx4421vUcPHiwc9zWzSO30o/lIrkuuugip/3dd9/Z+K677oo6nXJhy5YtNp46darT17hxYxsvWLAgspxQHJdeeqmNL7nkEqfvqaeesjFj0S+rVq1y2u3bt7dxeJpR7969bRyeDojtW7FihY31Z50LL7zQOa5ly5Y2vuOOO5y+lSsTsyt6ohx//PE2rl27to3T/e6up8Dq6dC+4YkfAAAAAAAAT3HjBwAAAAAAwFMmyilLxphYzI9q1aqVjceNG+f06ZXAtRYtWjjt8GPUcZdme74yiUsNy6lpQRA03/5h20cdi4ex6AXG4na89tprTnvAgAE2njhxYtTplMrnsbjvvvs67bvvvtvG06ZNs7EHu+aV27GoP8vqHZpE3Om4AwcOdPr0tOpffvmlQNmVjc9jMS7CuxYfe+yxNj7mmGNsnMN063I7Fn3iw1icPn26jQ8//PCUx/Xv39/GeuqjB1KORZ74AQAAAAAA8BQ3fgAAAAAAADzFjR8AAAAAAABPlcvt3Fu3bm3jVGv6iIgsXLjQxuvXry9oTgAA+EJvb4voffPNN0774osvLlImKJTJkyfbWG9fDJSmU6dOTluvg9KoUSMb57DGDxALVatWtbExvy9ZtHLlSue4hx56KLKc4oInfgAAAAAAADzFjR8AAAAAAABPlcupXunoRx9POOEEG69Zs6YY6QAAAABA1r7//nun3aBBgyJlAhTWgAEDSo3vuusu57hly5ZFllNc8MQPAAAAAACAp7jxAwAAAAAA4Clu/AAAAAAAAHjKBEEQ3cWMie5icARBYLZ/1PZRw6KaFgRB83yciDoWD2PRC4xFDzAWvTy00OQAAARVSURBVMBY9ABj0QuMRQ8wFr2QcizyxA8AAAAAAICnuPEDAAAAAADgqai3c18tIotFZO+SuJjikININHnUy+O54lRDkfKVR77r+KOUn3+7TCSxhozFbSWxjoxFVxJryFjcVhLryFh0JbGGjMVtJbGOjEVXEmvIWCxODinrGOkaP/aixkzN1zzQJOcQpzzKKi55k0f24pIzeeQmLnmTR/bikjN55CYueZNH9uKSM3nkJi55k0f24pIzeeQmLnnHIY845MBULwAAAAAAAE9x4wcAAAAAAMBTxbrxM7hI19XikINIfPIoq7jkTR7Zi0vO5JGbuORNHtmLS87kkZu45E0e2YtLzuSRm7jkTR7Zi0vO5JGbuOQdhzyKnkNR1vgBAAAAAABA4THVCwAAAAAAwFOR3vgxxpxsjJlnjFlgjOkT4XWHGGNWGmNmqq9VNca8Y4z5ouTvvSLIo44xZqIxZrYxZpYxpmexcslFea4jNcz5utQwT4pVw5JrU8c8YSxSwxyvTR3zhLFIDXO8NnXME8YiNczx2tQxlSAIIvkjIhVEZKGI7C8iO4nIdBE5NKJrtxGRpiIyU32tn4j0KYn7iMj/iyCPWiLStCTeXUTmi8ihxciFOlJDakgNqWP5rSM1TH4NqaMfdaSGya8hdfSjjtQw+TWkjtvJK8IiHCsib6n2TSJyU4TXrx/6BpgnIrVUceZF+Q9fct1XReRPcciFOlJDakgNqWP5qiM1TH4NqaMfdaSGya8hdfSjjtQw+TWkjqn/RDnVaz8R+Uq1l5Z8rVhqBkGwrCReLiI1o7y4Maa+iBwlIp8UO5cyoo4lqGHeUMOyi1sNRahjNuJWR2pYdnGroQh1zEbc6kgNyy5uNRShjtmIWx2pYdnFrYYi1FFEWNxZRESCrbfdgqiuZ4ypLCKjReSaIAi+L2YuPony344aFgY19AN1TD5q6AfqmHzU0A/UMfmooR/Kcx2jvPHztYjUUe3aJV8rlhXGmFoiIiV/r4ziosaYirL1G2BEEARjiplLlsp9Halh3lHDsotbDUWoYzbiVkdqWHZxq6EIdcxG3OpIDcsubjUUoY7ZiFsdqWHZxa2GItRRRKK98fNvETnAGNPAGLOTiHQRkbERXj9srIh0K4m7yda5dwVljDEi8pSIzAmCYEAxc8lBua4jNSwIalh2cauhCHXMRtzqSA3LLm41FKGO2YhbHalh2cWthiLUMRtxqyM1LLu41VCEOm4V5YJCItJBtq5qvVBEbonwuiNFZJmIbJKt8wwvEZFqIjJBRL4QkXdFpGoEebSSrY90zRCRz0v+dChGLtSRGlJDakgdi/+HsUgNqWM8/jAWqSF1jMcfxiI1pI6F+WNKkgMAAAAAAIBnWNwZAAAAAADAU9z4AQAAAAAA8BQ3fgAAAAAAADzFjR8AAAAAAABPceMHAAAAAADAU9z4AQAAAAAA8BQ3fgAAAAAAADzFjR8AAAAAAABP/X95Lk20/84uEQAAAABJRU5ErkJggg==\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Compressed Image\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Reconstruction of Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAABH4AAACACAYAAAB9Yq5jAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nO3debQU1bUG8O+IAioKgogXZFABEXFAQQVlUFBEJcQhGqNxiFlGlwMqMRqzkjw1rvXUJBo1iYvwHBMRZzEEDSqKI6IIgjiAMiiCBJxAcUDq/cHN4Tub203fvj1Unfv91mK5m6p7u+jdp6q6PftslyQJREREREREREQkPptV+wBERERERERERKQ89MWPiIiIiIiIiEik9MWPiIiIiIiIiEik9MWPiIiIiIiIiEik9MWPiIiIiIiIiEik9MWPiIiIiIiIiEikGvTFj3PuCOfc2865+c65y0p1UFJZymP2KYdxUB6zTzmMg/KYfcphHJTH7FMO46A8Zp9LkqS4H3SuCYB3ABwG4AMA0wGclCTJ3NIdnpSb8ph9ymEclMfsUw7joDxmn3IYB+Ux+5TDOCiPcdi8AT+7P4D5SZK8BwDOuXsAjASQ8w3gnCvuWyZpsCRJXI5N9cqjclhVK5IkaVvH32d2LDq34W1Z7JfQWaOxGIXoxmJjpLEYBY3FOjRt2tTH33zzTRWPpDAai1HQWIyAxmIUco3FBpV6dQDwPj3+oPbvJFuUx+xYlOPvM5vD5s2b+z/WZptt5v80EpnNYyMU3ViUgPKYHRqLdWjfvr3/k3GNOo8Zo7EYN+UxO3KNxQbN+CmIc+4sAGeV+3mkfJTDOCiP2accxkF5zD7lMA7KY/Yph3FQHrNPOUy/hnzxswRAR3q8U+3fBZIkGQNgDKBpXym1yTwqh6mX2bG4Zs2anNvWrVtXwSMpr1atWgEAVq1alW83jcXsq/dY3HrrrZMePXoAAGbMmFGBQ5QCaCxmX2avi6WwcOHCah9CqWgsZl+jHosR0ViMQENqKKYD6Oac29k51xTADwFMKM1hSQUpj9mnHMZBecw+5TAOymP2KYdxUB6zTzmMg/IYgaJn/CRJstY5dx6AxwE0AXBrkiRvlOzIpCKUx+xTDuOgPGafchgH5TH7lMM4KI/ZpxzGQXmMQ9Ht3It6Mk37qpo8q7TXi3JYVa8mSdKnFL9IeawsLvVau3atxmL2lWwsqtSrenRdjIKuixHQWIyCxmIENBajkHMsln1xZxGRxu7TTz+t9iFISn355ZcFfeHjXHgvVsn/aSMiIiIi2dZo+iSLiIiIiIiIiDQ2+uJHRERERERERCRSKvWSzGvSpEnw+LvvvvNx8+bNfbzTTjsF+82fP7+8ByYiUiIq7RIRyR6+DwWAr776qkpHkk16/cLPLx988EEVj0SyTjN+REREREREREQipS9+REREREREREQipS9+REREREREREQipTV+JDO23XZbHw8aNMjHjz76aLDf3Xff7eMf/ehHPr7++uuD/Tp06ODj9957L9h2/PHH+/icc87x8fTp04P91q5d6+OZM2fm/wfIRpo2berjb775pqCfadOmTfC4bdu2Pt588/CUNmfOHB/36NHDx2+99Va9jlOKs8022/h41apVPh42bFiw34oVK3zcrVu3YNs999zj46233trHX3zxRbAf557HZaxqamp8vHTp0rI+14477ujjZcuW5dyPW86XY02izTbb8P+q1q1bV/LfL4Urd65FYtEY16Qppay/fsOHD/cxX8MAYOLEiT7u3Lmzj1evXh3sp3V9pFQ040dEREREREREJFL64kdEREREREREJFKuklN0nXOaD1wlSZK4Te+1aZXM4RVXXBE8/u1vf1vnfrbUq2fPnj7m8qHtt98+2I/LUGy7yFz222+/4PGrr75a0M+VyKtJkvQpxS9Ky1jkcrslS5YU9DNdunQJHu+xxx4+5mmz+dj3ApcacTkRsHFJUUNlcSwWassttwwe77zzzj7u1KmTj4cOHRrst2bNGh//+te/Lui5dthhh+Dxt99+6+NPPvmkoN/RAFGMRc7XUUcd5WNb+vrll1/6+PPPP/exfZ25xI7zkc8WW2wRPOafyzdOSyG2scjl0Jyn+th11119/O677zb4mCrQijmKsZgLl9QBQJMmTXzM9zoLFiwI9uPS2iyIbSw2UtGNxV69evmYlw4AwnvRr7/+2sc8RoFwaYp//OMf9X5eAFi8eLGP27dvH2wr9dIFGotRyDkWNeNHRERERERERCRS+uJHRERERERERCRS0ZZ62enF7dq18/FHH32Ucz8uDeLp7WlhyxuWL19e0M9lcereBRdcEDzmqY+TJk3ysc1hv379fMzlXL179w724+mSr732WrCNp0mPHTvWxy+//HKw38cff5z7H1B60U2j5a5etkzos88+q/NneCwDQP/+/X3M5URAOD64bMHmsZIdarI4Fgs1ZMiQ4PFBBx3k465du/qYS7uAcMq0LZ/kcqIXX3zRx88//3ywX4U7C1V9LPJ4sa9nobhMct999/WxLbHijoV8/bTlmXzN3H333YNt3HmMn3fevHnBft99952P83UQK4WYx2K+EjpmOyEOGDCgzhgI882lBzwugY070pRZ1cdiMbhTHgD06bPhn8Dlxa1btw7243y9+eabPrad/bh7EI/Z+uB7K+6KCZS+i2nMY9Hi6x3f09tzYSlKlvN1wiyDTI7FQvHnCevQQw/18f777x9s486zfO0DwrJqLhez7wUuM7NlnXPnzs132PXWmMZiKfAY5s+OtiSvZcuWPt5qq62Cbc8991ypD0ulXiIiIiIiIiIijY2++BERERERERERiZS++BERERERERERidTmm96l+rhWuXv37j62Ley4Bvncc88NtnHdHddHvvPOO8F+zzzzjI8PO+wwH++0007Bftwqles3gbBOk4993bp1wX68rsyHH34YbOOWp/xcha7pk1WHH364j1944YVg29SpU338n//8x8f2tRs3bpyPjzvuOB/bVsD77LOPj1euXBlsmzx5so+nTZvm4wq0iY6OXZeK10XiNbU4zme77bYLHrdo0aLOGAjXmuBW0xavD2PH+gcffFDQcTVW3AZ8zz33DLZdeeWVPn722Wd9bNek4XVd2rRpE2z79NNPfczrO+29997BfqVecyLt+DXkdT/s+3z48OE+ti2ed955Zx/zuhP2WjVlyhQft2rVyse51uECgNdffz143KFDBx/z2j28thAQ1r7bNX74+txY8ZodQO51O3Kt6WPttttuwWO+Lto1CnbZZRcf83ieMWNGsB+fd3kdN6Dw83yMeO2sQw45JNjG44/Pefa+Zfz48T7m9ULsmk72vigXHm+8TgkQnovfeOONYBu/b95+++2Cnit2vI4dnyftGOOW3meffbaP+V4TCNd/ef/994NtfJ7nzwhWBdb1iRqPAV6zEAAmTJjgY15DNN/aLvzZBQivtTyOeP0uexx8rgDCtfUWLly40b9BNrDrF/L5ddiwYT62a6vxa27HFK/H1K1bNx/z53gg/Gxhxyx/dnnsscdyHn8paMaPiIiIiIiI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WbWE+HMAEObDLh/A2rdv7+P33nsv2Lb77rv7mMezlh8oLb7GcVktEN6zconyww8/HOzH94q2BHr27Nk+tp9DJD8u4bLldXye5M8jtrSZz6+N5VqoGT8iIiIiIiIiIpHSFz8iIiIiIiIiIpFylezM4Jyr2JN17tw5eNyzZ08fd+vWzccDBgwI9uMV9rnTk53id9111/nYlkGksctXnvZ89VLJHMpGXk2SpE8pflEl82i7X/H4484Fdjo0T7vkbhdZ756lsRiW+wEbd8vIgEyOxVLgsiPurggA++23n495ejUQlhpxJ41qyuJYtOdJvjfhUlxbisolYtxFz5ag5+tAlFJRj8WBAwcGj7lUZOjQoT7mclkgzP/MmTODba+88oqPbSepasniWLT48wOXX9nrHZfQcdkXd+ACwuUIuKzFPte9995b3AGXXtRjMR/OsS074vIiPvcC+ZclqZYsjkXusAYAgwcP9jFf02zXO/68zku62JIw/qySkRLYnGNRM35ERERERERERCKlL35ERERERERERCKlL35ERERERERERCKViXbuzZs397Gtj8zFtjLlWtk999zTx7YW88ADDyzo9/fo0cPHaVzTRyQt7Jo83OaZ69Tnz59fsWOS6srgmj5Sa82aNXXGQONph1pNdk0ets022/i4krmw6wnla1Et9TN16tSc2yZMmJBzW58+G5Z34DV9pHx4zTNe46fQ693ChQuDx127dvXx448/3rCDk7LiHPM9rpTPPvvs4+NJkyYF23i9wZqaGh/z2r0AcN9995Xp6NJLM35ERERERERERCKlL35ERERERERERCKV6Xbutk00l5S0b98+2JZr2vMJJ5wQPObpYZdeemnO5+YpZrZVZhplsT2fbCSTrTK5zBIAVq9eXamnTiWNxShkciyW21ZbbeXjLLQF11iMQtRjsVevXsHjOXPmVOlIyktjMZt22GEHHy9fvjzqsdhYxDwWjzrqqODxxIkTq3QkZad27iIiIiIiIiIijY2++BERERERERERiZS++BERERERERERiVSm1/gpBW7LDoRt+LK2XkE+MddsNiKqn46AxmIUNBYjoLEYBY3FCGgsRkFjMQIai1HQGj8iIiIiIiIiIo2NvvgREREREREREYnU5hV+vhUAFgHYvjaupu0BrODSLqtC5V2VeC06l/B3pSmHQOM6jlLn8Qs0nteuEFnMocbixrKYR43FUBZzqLG4sSzmUWMxlMUcaixuLIt51FgMZTGHGovVOYaceazoGj/+SZ17pVR1oFk+hjQdR32l5bh1HMVLyzHrOBomLcet4yheWo5Zx9EwaTluHUfx0nLMOo6GSctx6ziKl5Zj1nE0TFqOOw3HkYZjUKmXiIiIiIiIiEik9MWPiIiIiIiIiEikqvXFz5gqPS9LwzEA6TmO+krLces4ipeWY9ZxNExajlvHUby0HLOOo2HSctw6juKl5Zh1HA2TluPWcRQvLces42iYtBx3Go6j6sdQlTV+RERERERERESk/FTqJSIiIiIiIiISqYp+8eOcO8I597Zzbr5z7rIKPu+tzrnlzrk59HetnXOTnXPzav+7XQWOo6Nzbopzbq5z7g3n3KhqHUtDNOY8KocNfl7lsESqlcPa51YeS0RjUTls4HMrjyWisagcNvC5lccS0VhUDhv43MpjLkmSVOQPgCYA3gWwC4CmAGYB6Fmh5x4IYF8Ac+jvrgVwWW18GYBrKnAcNQD2rY23AfAOgJ7VOBblUTlUDpVD5bHx5lE5zH4Olcc48qgcZj+HymMceVQOs59D5XETx1XBJPQD8Dg9/iWAX1bw+buYN8DbAGooOW9X8oWvfd5HAByWhmNRHpVD5VA5VB4bVx6Vw+znUHmMI4/KYfZzqDzGkUflMPs5VB5z/6lkqVcHAO/T4w9q/65a2iVJsrQ2XgagXSWf3DnXBUBvANOqfSz1pDzWUg5LRjmsv7TlEFAei5G2PCqH9Ze2HALKYzHSlkflsP7SlkNAeSxG2vKoHNZf2nIIKI8AtLgzACBZ/7VbUqnnc861APAAgAuTJPm8mscSk0q+dspheSiHcVAes085jIPymH3KYRyUx+xTDuPQmPNYyS9+lgDoSI93qv27avnIOVcDALX/XV6JJ3XObYH1b4B/JEnyYDWPpUiNPo/KYckph/WXthwCymMx0pZH5bD+0pZDQHksRtryqBzWX9pyCCiPxUhbHpXD+ktbDgHlEUBlv/iZDqCbc25n51xTAD8EMKGCz29NAHBabXwa1tfelZVzzgH4PwBvJknyx2oeSwM06jwqh2WhHNZf2nIIKI/FSFselcP6S1sOAeWxGGnLo3JYf2nLIaA8FiNteVQO6y9tOQSUx/UquaAQgCOxflXrdwH8qoLPOw7AUgDfYn2d4ZkA2gB4EsA8AE8AaF2B4zgY66d0vQ5gZu2fI6txLMqjcqgcKofKY/X/aCwqh8pjOv5oLCqHymM6/mgsKofKY3n+uNqDExERERERERGRyGhxZxERERERERGRSOmLHxERERERERGRSOmLHxERERERERGRSOmLHxERERERERGRSOmLHxERERERERGRSOmLHxERERERERGRSOmLHxERERERERGRSOmLHxERERERERGRSP0/hJceGvcEhiwAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "zfNjmrO9RMJI"
      },
      "source": [
        "# Building the model - Experiment_RMSProp"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nv2Pn8PAQosY",
        "outputId": "c082c24b-cae4-413b-8fbd-ab8a05b863c2"
      },
      "source": [
        "#Encoder\n",
        "encoder_input = keras.Input(shape=(28, 28, 1), name='img')\n",
        "x = keras.layers.Flatten()(encoder_input)\n",
        "encoder_output = keras.layers.Dense(64, activation=\"relu\")(x)\n",
        "\n",
        "encoder = keras.Model(encoder_input, encoder_output, name='encoder')\n",
        "\n",
        "#decoder\n",
        "decoder_input = keras.layers.Dense(64, activation=\"relu\")(encoder_output)\n",
        "x = keras.layers.Dense(784, activation=\"relu\")(decoder_input)\n",
        "decoder_output = keras.layers.Reshape((28, 28, 1))(x)\n",
        "\n",
        "#autoencoder\n",
        "autoencoder = keras.Model(encoder_input, decoder_output, name='autoencoder')\n",
        "\n",
        "autoencoder.summary()\n",
        "\n",
        "#compile the model\n",
        "autoencoder.compile(loss='mean_squared_error', optimizer = RMSprop())\n",
        "\n",
        "#fit the model\n",
        "autoencoder_train = autoencoder.fit(train_X, train_ground, batch_size=128, epochs=50, validation_data=(valid_X, valid_ground))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"autoencoder\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "img (InputLayer)             [(None, 28, 28, 1)]       0         \n",
            "_________________________________________________________________\n",
            "flatten_2 (Flatten)          (None, 784)               0         \n",
            "_________________________________________________________________\n",
            "dense_6 (Dense)              (None, 64)                50240     \n",
            "_________________________________________________________________\n",
            "dense_7 (Dense)              (None, 64)                4160      \n",
            "_________________________________________________________________\n",
            "dense_8 (Dense)              (None, 784)               50960     \n",
            "_________________________________________________________________\n",
            "reshape_2 (Reshape)          (None, 28, 28, 1)         0         \n",
            "=================================================================\n",
            "Total params: 105,360\n",
            "Trainable params: 105,360\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n",
            "Epoch 1/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0449 - val_loss: 0.0221\n",
            "Epoch 2/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0212 - val_loss: 0.0189\n",
            "Epoch 3/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0179 - val_loss: 0.0175\n",
            "Epoch 4/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0163 - val_loss: 0.0151\n",
            "Epoch 5/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0152 - val_loss: 0.0146\n",
            "Epoch 6/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0146 - val_loss: 0.0133\n",
            "Epoch 7/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0135 - val_loss: 0.0136\n",
            "Epoch 8/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0132 - val_loss: 0.0139\n",
            "Epoch 9/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0128 - val_loss: 0.0131\n",
            "Epoch 10/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0126 - val_loss: 0.0129\n",
            "Epoch 11/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0124 - val_loss: 0.0120\n",
            "Epoch 12/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0122 - val_loss: 0.0113\n",
            "Epoch 13/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0121 - val_loss: 0.0119\n",
            "Epoch 14/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0119 - val_loss: 0.0117\n",
            "Epoch 15/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0118 - val_loss: 0.0121\n",
            "Epoch 16/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0117 - val_loss: 0.0112\n",
            "Epoch 17/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0115 - val_loss: 0.0127\n",
            "Epoch 18/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0114 - val_loss: 0.0117\n",
            "Epoch 19/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0113 - val_loss: 0.0115\n",
            "Epoch 20/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0112 - val_loss: 0.0118\n",
            "Epoch 21/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0112 - val_loss: 0.0116\n",
            "Epoch 22/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0111 - val_loss: 0.0118\n",
            "Epoch 23/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0111 - val_loss: 0.0110\n",
            "Epoch 24/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0110 - val_loss: 0.0121\n",
            "Epoch 25/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0109 - val_loss: 0.0108\n",
            "Epoch 26/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0109 - val_loss: 0.0110\n",
            "Epoch 27/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0109 - val_loss: 0.0104\n",
            "Epoch 28/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0108 - val_loss: 0.0111\n",
            "Epoch 29/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0108 - val_loss: 0.0098\n",
            "Epoch 30/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0107 - val_loss: 0.0108\n",
            "Epoch 31/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0107 - val_loss: 0.0113\n",
            "Epoch 32/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0107 - val_loss: 0.0111\n",
            "Epoch 33/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0105 - val_loss: 0.0111\n",
            "Epoch 34/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0104 - val_loss: 0.0110\n",
            "Epoch 35/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0105 - val_loss: 0.0108\n",
            "Epoch 36/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0105 - val_loss: 0.0107\n",
            "Epoch 37/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0105 - val_loss: 0.0100\n",
            "Epoch 38/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0104 - val_loss: 0.0111\n",
            "Epoch 39/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0104 - val_loss: 0.0104\n",
            "Epoch 40/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0104 - val_loss: 0.0104\n",
            "Epoch 41/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0104 - val_loss: 0.0111\n",
            "Epoch 42/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0103 - val_loss: 0.0106\n",
            "Epoch 43/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0103 - val_loss: 0.0105\n",
            "Epoch 44/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0104 - val_loss: 0.0099\n",
            "Epoch 45/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0103 - val_loss: 0.0102\n",
            "Epoch 46/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0103 - val_loss: 0.0113\n",
            "Epoch 47/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0103 - val_loss: 0.0100\n",
            "Epoch 48/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0103 - val_loss: 0.0106\n",
            "Epoch 49/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0103 - val_loss: 0.0104\n",
            "Epoch 50/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0102 - val_loss: 0.0107\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "id": "kACJpMQKTUkf",
        "outputId": "ba2de3df-3df9-426f-97b8-49d700ec941a"
      },
      "source": [
        "loss = autoencoder_train.history['loss']\n",
        "val_loss = autoencoder_train.history['val_loss']\n",
        "epochs = range(50)\n",
        "plt.figure()\n",
        "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
        "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
        "plt.title('Training and validation loss')\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 454
        },
        "id": "J1A1138YQo6u",
        "outputId": "3312599b-70ca-403c-ecba-1d0f5196e89a"
      },
      "source": [
        "comp = encoder.predict(X_test)\n",
        "pred = autoencoder.predict(X_test)\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(X_test[i].reshape((28, 28)), cmap='gray')\n",
        "plt.show()\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Compressed Image\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(comp[i].reshape((8, 8)), cmap='gray')\n",
        "plt.show() \n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Reconstruction of Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(pred[i].reshape((28, 28)), cmap='gray')  \n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Compressed Image\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Reconstruction of Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "la_ZfzJHXsVb"
      },
      "source": [
        "# Building the model - Experiment_ADAM"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ccE50eemQo9d",
        "outputId": "ffb7c408-5db3-4a86-95ef-29ced8797e71"
      },
      "source": [
        "#Encoder\n",
        "encoder_input = keras.Input(shape=(28, 28, 1), name='img')\n",
        "x = keras.layers.Flatten()(encoder_input)\n",
        "encoder_output = keras.layers.Dense(64, activation=\"relu\")(x)\n",
        "\n",
        "encoder = keras.Model(encoder_input, encoder_output, name='encoder')\n",
        "\n",
        "#decoder\n",
        "decoder_input = keras.layers.Dense(64, activation=\"relu\")(encoder_output)\n",
        "x = keras.layers.Dense(784, activation=\"relu\")(decoder_input)\n",
        "decoder_output = keras.layers.Reshape((28, 28, 1))(x)\n",
        "\n",
        "#autoencoder\n",
        "autoencoder = keras.Model(encoder_input, decoder_output, name='autoencoder')\n",
        "\n",
        "autoencoder.summary()\n",
        "\n",
        "#compile the model\n",
        "autoencoder.compile(loss='mean_squared_error', optimizer = Adam())\n",
        "\n",
        "#fit the model\n",
        "autoencoder_train = autoencoder.fit(train_X, train_ground, batch_size=128, epochs=50, validation_data=(valid_X, valid_ground))"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"autoencoder\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "img (InputLayer)             [(None, 28, 28, 1)]       0         \n",
            "_________________________________________________________________\n",
            "flatten_3 (Flatten)          (None, 784)               0         \n",
            "_________________________________________________________________\n",
            "dense_9 (Dense)              (None, 64)                50240     \n",
            "_________________________________________________________________\n",
            "dense_10 (Dense)             (None, 64)                4160      \n",
            "_________________________________________________________________\n",
            "dense_11 (Dense)             (None, 784)               50960     \n",
            "_________________________________________________________________\n",
            "reshape_3 (Reshape)          (None, 28, 28, 1)         0         \n",
            "=================================================================\n",
            "Total params: 105,360\n",
            "Trainable params: 105,360\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n",
            "Epoch 1/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0472 - val_loss: 0.0159\n",
            "Epoch 2/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0146 - val_loss: 0.0127\n",
            "Epoch 3/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0123 - val_loss: 0.0115\n",
            "Epoch 4/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0112 - val_loss: 0.0108\n",
            "Epoch 5/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0106 - val_loss: 0.0103\n",
            "Epoch 6/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0102 - val_loss: 0.0100\n",
            "Epoch 7/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0098 - val_loss: 0.0097\n",
            "Epoch 8/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0096 - val_loss: 0.0096\n",
            "Epoch 9/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0094 - val_loss: 0.0095\n",
            "Epoch 10/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0093 - val_loss: 0.0094\n",
            "Epoch 11/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0092 - val_loss: 0.0092\n",
            "Epoch 12/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0091 - val_loss: 0.0092\n",
            "Epoch 13/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0091 - val_loss: 0.0091\n",
            "Epoch 14/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0090 - val_loss: 0.0091\n",
            "Epoch 15/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0090 - val_loss: 0.0091\n",
            "Epoch 16/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0090 - val_loss: 0.0091\n",
            "Epoch 17/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0089 - val_loss: 0.0090\n",
            "Epoch 18/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0089 - val_loss: 0.0090\n",
            "Epoch 19/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0089 - val_loss: 0.0090\n",
            "Epoch 20/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0088 - val_loss: 0.0090\n",
            "Epoch 21/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0088 - val_loss: 0.0089\n",
            "Epoch 22/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0088 - val_loss: 0.0089\n",
            "Epoch 23/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0088 - val_loss: 0.0089\n",
            "Epoch 24/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0088 - val_loss: 0.0089\n",
            "Epoch 25/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0087 - val_loss: 0.0089\n",
            "Epoch 26/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0087 - val_loss: 0.0088\n",
            "Epoch 27/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0086 - val_loss: 0.0088\n",
            "Epoch 28/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0086 - val_loss: 0.0087\n",
            "Epoch 29/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0086 - val_loss: 0.0087\n",
            "Epoch 30/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0086 - val_loss: 0.0087\n",
            "Epoch 31/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0086 - val_loss: 0.0086\n",
            "Epoch 32/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0086 - val_loss: 0.0087\n",
            "Epoch 33/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 34/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 35/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 36/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0085 - val_loss: 0.0087\n",
            "Epoch 37/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 38/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0085 - val_loss: 0.0087\n",
            "Epoch 39/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 40/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 41/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 42/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 43/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0084 - val_loss: 0.0086\n",
            "Epoch 44/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0085 - val_loss: 0.0086\n",
            "Epoch 45/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0085 - val_loss: 0.0085\n",
            "Epoch 46/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0084 - val_loss: 0.0085\n",
            "Epoch 47/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0084 - val_loss: 0.0085\n",
            "Epoch 48/50\n",
            "375/375 [==============================] - 1s 3ms/step - loss: 0.0083 - val_loss: 0.0086\n",
            "Epoch 49/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0083 - val_loss: 0.0085\n",
            "Epoch 50/50\n",
            "375/375 [==============================] - 1s 2ms/step - loss: 0.0084 - val_loss: 0.0085\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 281
        },
        "id": "i_O6yDXYQpG_",
        "outputId": "c0ff1ffc-ea24-4577-d202-12452cce5272"
      },
      "source": [
        "loss = autoencoder_train.history['loss']\n",
        "val_loss = autoencoder_train.history['val_loss']\n",
        "epochs = range(50)\n",
        "plt.figure()\n",
        "plt.plot(epochs, loss, 'bo', label='Training loss')\n",
        "plt.plot(epochs, val_loss, 'b', label='Validation loss')\n",
        "plt.title('Training and validation loss')\n",
        "plt.legend()\n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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55/PtGnTKCoqom/fvtx6660J5+/RoweffPIJAHPmzOH000/nvPPOOzxkNATn+BcXFzNgwAAuv/xy9u7dy0svvcTSpUv50Y9+REFBAW+99RZlZWU8+uijADzzzDMUFhbSr18/Jk6cyP79+w9/3q233srAgQPp168fGzZsqHL9Mj1stK4DEJGUXH89rF2b3mUWFMDttyd//8QTT6SkpIRly5YxevRoFi1axLe+9S3MjDlz5nDiiSdy6NAhhg0bxmuvvUb//v0TLmf16tUsWrSItWvXcvDgQQYOHMigQYMAuOyyy5g0aRIA//Zv/8Z9993Hd7/7XUaNGsXIkSMZO3bsUcvat28fZWVlPPPMM5x++umMHz+eu+++m+uvvx6Ajh07smbNGu666y7mzp3Lvffem3T9Mj1stPYARKRRi+0Giu3+eeSRRxg4cCCFhYWsX7/+qO6aeM8//zyXXnopubm5HHfccYwaNerwe+vWreP888+nX79+LFy4kPXrq749+caNG+nZsyenn346ABMmTGDlypWH37/ssssAGDRo0OEB5JJ54YUXuPrqq4HEw0bfcccd7Nixg+zsbIqLi5k/fz6zZs3i9ddfp3379lUuOxXaAxCRlFT1Tb0+jR49munTp7NmzRr27t3LoEGDePvtt5k7dy6rVq3ihBNOoKysLOkw0NUpKytjyZIlDBgwgPvvv58VK1bUqb2VQ0rXZTjpmTNncskll/Dkk08yZMgQnnrqqcPDRj/xxBOUlZUxY8YMxo8fX6e2ag9ARBq1du3aceGFFzJx4sTD3/537dpF27Zt6dChAx999BHLli2rchkXXHABS5Ys4fPPP2f37t089thjh9/bvXs3J598MgcOHDg8hDNA+/bt2b179zHLOuOMM9iyZQubNm0C4MEHH+RrX/tardYt08NGaw9ARBq9cePGcemllx7uCqocPrl379507dqVIUOGVDn/wIEDufLKKxkwYACdO3emuLj48Hs//elPGTx4MJ06dWLw4MGHN/pXXXUVkyZN4o477jh88BegdevWzJ8/nyuuuIKDBw9SXFzM1KlTa7Velfcq7t+/P7m5uUcNG/3ss8/SokUL+vbty4gRI1i0aBG/+MUvaNmyJe3atUvLjWM0HLSIJKXhoJseDQctIiLVUgCIiESUAkBEqtSUuomjrqa/KwWAiCTVunVrtm/frhBo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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 454
        },
        "id": "J27I_-cnYunX",
        "outputId": "cf92c148-cac3-49b1-ddeb-02770c0ebcaa"
      },
      "source": [
        "comp = encoder.predict(X_test)\n",
        "pred = autoencoder.predict(X_test)\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(X_test[i].reshape((28, 28)), cmap='gray')\n",
        "plt.show()\n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Compressed Image\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(comp[i].reshape((8, 8)), cmap='gray')\n",
        "plt.show() \n",
        "\n",
        "plt.figure(figsize=(20, 4))\n",
        "print(\"Reconstruction of Test Images\")\n",
        "for i in range(10):\n",
        "    plt.subplot(2, 10, i+1)\n",
        "    plt.imshow(pred[i].reshape((28, 28)), cmap='gray')  \n",
        "plt.show()"
      ],
      "execution_count": null,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Compressed Image\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        },
        {
          "output_type": "stream",
          "text": [
            "Reconstruction of Test Images\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 1440x288 with 10 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}